在Ruby中,如何从该类的实例中调用类方法?说我有
class Truck
def self.default_make
# Class method.
"mac"
end
def initialize
# Instance method.
Truck.default_make # gets the default via the class's method.
# But: I wish to avoid mentioning Truck. Seems I'm repeating myself.
end
end
Truck.default_make
行检索默认值 . 但有没有办法说这个而不提 Truck
?好像应该有 .
9 回答
如果您有权访问委托方法,则可以执行以下操作:
或者,如果你想要委托给类和实例的方法有两个以上,那么可能更清晰:
提醒一句:
不要随便
delegate
所有不会开始遇到奇怪的名称冲突问题 . 谨慎地这样做,只有在你检查后没有其他东西被压扁 .你是以正确的方式做到的 . 类方法(类似于C或Java中的'静态'方法)不是实例的一部分,因此必须直接引用它们 .
在那个例子中,在你的例子中,你可以更好地使'default_make'成为常规方法:
类方法对于使用该类的实用程序类型函数更有用 . 例如:
多一个:
与您的问题类似,您可以使用:
在实例方法中,您可以只调用
self.class.whatever
,而不是引用类的文字名称 .输出:
使用
self.class.blah
与继承时使用ClassName.blah
不同 .要访问实例方法中的类方法,请执行以下操作:
以下是您的问题的替代解决方案:
现在让我们使用我们的课程:
这是一种关于如何实现
_class
方法的方法,该方法在这种情况下用作self.class
. 注意:不要在 生产环境 代码中使用它,这是为了感兴趣:)来自:Can you eval code in the context of a caller in Ruby?和http://rubychallenger.blogspot.com.au/2011/07/caller-binding.html
也许正确的答案是为Ruby提交补丁:)