Ruby--类
类的定义:
class ClassName
def method_name(variables)
#some code
end
end
eg:
class Person
def initialize(name, gender, age)
@name = name
@gender = gender
@age = age
end
end
people = new Person.new('Tom', 'male', 15),initialize方法在构造实例时被调用,是一个特殊的方法
若原有的类已经定义,又有相同的类名进行类定义的话,意味着对原有的类的进行追加;方法重新定义,结果为覆盖
对象、属性、方法:
在Ruby中,只有方法可以操作实例变量,Ruby中的封装都是强制性的。在对象外部不可以直接访问,只能通过接口方法访问。
只读属性:attr_reader 只写属性:attr_writer 即可读又可写:attr_accessor
attr: name, true 读写
attr: id, false 只读
self关键字相当于java中的this
继承:
单继承,使用<即可,super关键字调用对象父类的方法,省略参数时,使用当前方法的参数进行调用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class Base def meth(info) puts "This is Base #{info}" end end class Derived < Base def meth(info) puts "This is Derived #{info}" super end end obj1 = Derived. new obj1.meth( "test" ) |
特殊方法是指某实例特有的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class SingletonTest def info puts "This is a SingleTon test." end end obj1 = SingletonTest. new obj2 = SingletonTest. new def obj2.info puts "This is obj2" end obj1.info obj2.info |
特殊类:
属于某实例的类。
class <<obj
...
end
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | class SingletonTest def meth1 puts "This is meth1" end def meth2 puts "This is meth2" end end obj1 = SingletonTest. new obj2 = SingletonTest. new class <<obj2 def meth1 puts "This is obj2.meth1" end def meth2 puts "This is obj2.meth2" end def meth3 puts "This is obj2.meth3" end end obj1.meth1 obj1.meth2 obj2.meth1 obj2.meth2 obj2.meth3 |
类变量: 以@@开头,eg:@@number 使用前必须初始化
类方法:Classname.classMethod
存取控制:
public方法:任何地方都能访问
protected方法:本类的方法和子类的方法都能访问
private方法:只能由对象自己访问,这一点和java不同!即在本类的方法中,不能调用本类其他对象的私有方法
默认都是public方法,除了initialize和initlialize_copy方法,它们永远都是私有方法
模块中定义的类变量被所有包含该模块的类所共享
module TestModule
@@foo = 10
end
defined? 用来判断表达式是否有定义,若尚未定义,返回nil;否则,返回一个字符串描述该表达式的种类。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· dotnet 9 通过 AppHostRelativeDotNet 指定自定义的运行时路径
· 如何统计不同电话号码的个数?—位图法
· C#高性能开发之类型系统:从 C# 7.0 到 C# 14 的类型系统演进全景
· 从零实现富文本编辑器#3-基于Delta的线性数据结构模型
· 记一次 .NET某旅行社酒店管理系统 卡死分析
· 用c#从头写一个AI agent,实现企业内部自然语言数据统计分析
· 三维装箱问题(3D Bin Packing Problem, 3D-BPP)
· Windows上,10分钟构建一个本地知识库
· 使用 AOT 编译保护 .NET 核心逻辑,同时支持第三方扩展
· Java虚拟机代码是如何一步一步变复杂且难以理解的?