sli*_*000 3 ruby singleton-methods
我不确定这个之间的区别.
def String.hello
puts "hello there"
end
Run Code Online (Sandbox Code Playgroud)
和
x = Person.new
def x.hello
puts "hello there"
end
Run Code Online (Sandbox Code Playgroud)
根据我的理解,第二个代码块将创建Person类的对象.当我执行def x.hello时,它会创建一个匿名类(单例类),在向x对象发送消息时,将首先检查方法.
def String.hello的情况是否相同?String只是类Class的实例正确吗?我已经读过,做def String.hello会将方法添加为String的类方法之一....这与创建的匿名类不同,后者位于对象及其类之间,获取其实例方法.
上面的两个代码块会发生什么?
我喜欢这部分红宝石.有这种美丽的对称性,其中大多数核心功能只是高级功能的糖,所以一旦你完全理解了一个概念,你就可以将这种理解应用到很多语言中.
def String.hello的情况是否相同?String只是类Class的实例正确吗?
是的,您正在创建Class的实例,并将其分配给常量.
我已经读过,做def String.hello会将方法添加为String的类方法之一....这与创建的匿名类不同,后者位于对象及其类之间,获取其实例方法.
不,你缺少的部分是认为有可能有一个类级方法而不将它添加到单例类.你所拥有的是一个对象,它是一个Class的实例,你将方法添加到位于它和Class之间的隐式类.您有时也会看到这种语法
class << self
def method
end
end
Run Code Online (Sandbox Code Playgroud)
这是做同样的事情,只是非常明确.
| 归档时间: |
|
| 查看次数: |
3261 次 |
| 最近记录: |