作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
> A.func func >> A::func func 为什么 . 和 :: 都存在?为什么-6ren">
module A
def self.func
puts "func"
end
end
>> A.func
func
>> A::func
func
为什么 .
和 ::
都存在?为什么不仅是 .
?
最佳答案
作用域解析运算符 (::
) 可以解析常量、实例方法和类方法,因此只要我们在正确的位置查找,我们就可以将该运算符用于基本上任何方法。
此外,由于方法“func”被定义为模块 A 的类方法(通过 self.func
,类似于“静态”方法)它直接属于模块(即本身是一个对象)所以它可以用点运算符调用,模块作为接收者。请注意,模块 A 的实例对“func”没有任何可见性,因为它是一个类方法:
aye = Object.new.extend(A)
aye::func # raises NoMethodError
aye.func # raises NoMethodError
如果该方法被定义为实例方法,则只能在模块实例上使用点运算符调用它。
module B
def func2
puts "OK!"
end
end
B::func2 # raises NoMethodError
B.func2 # raises NoMethodError
bee = Object.new.extend(B)
bee::func2 # "OK!"
bee.func2 # "OK!"
关于ruby - 为什么在 Ruby 中存在两种访问模块函数的方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6412040/
我有 json 数据: { "products": [ { "productId" : 0, "productImg" : "../img/product-ph
我是一名优秀的程序员,十分优秀!