为什么在Ruby中存在两种访问模块函数的方法?
发布时间:2020-12-16 19:04:32 所属栏目:百科 来源:网络整理
导读:module A def self.func puts "func" endend A.funcfunc A::funcfunc 为什么两者都有.和::存在?为什么不呢? 解决方法 范围解析运算符(::)可以解析常量,实例方法和类方法,因此只要我们在正确的位置查找,我们就可以将该运算符用于基本上任何方法. 另外,由于
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!" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |