以下两个Ruby和Python代码是类方法的示例。为什么python允许通过对象访问类方法,但ruby没有?
Python代码
class student:
b = 78
@classmethod
def foo(var):
return var.b
z = student()
print z.foo() # => 78
Ruby Code
class Student
@@b = 78
def self.foo
@@b
end
end
z = Student.new
puts z.foo # => -e:20:in `<main>': undefined method `foo' for #<Student:0x007ff4f98ab9e8> (NoMethodError)
答案 0 :(得分:0)
来自Ruby doc Object#display
:
display(port=$>)
在给定端口上打印
obj
(默认为$>
)。相当于:def display(port=$>) port.write self end
所以它只显示接收器,它是一个Student
实例。我不知道这与课堂方法有什么关系。
实际上可以调用类方法Student.display
:
z.class.display
答案 1 :(得分:0)
你的问题的红宝石方面的答案:Ruby允许通过对象通过对象访问类方法:
class Student
@@b = 78
def self.foo
@@b
end
end
z = Student.new
puts z.class.foo
z.class
返回对象的类(在本例中为Student
)。
class Student
end
z = Student.new
puts z.class #Student
puts z.class.class #Class
答案 2 :(得分:0)
Ruby没有类方法,只有实例方法。在您的情况下,foo
是Student
的单例类的实例方法。
一旦你理解Ruby中没有类方法这样的东西,只有实例方法,那么为什么在一个完全不同的实例上调用一个实例是不可行的,这一点应该是显而易见的。