这是一些代码:
class Person
def initialize(age)
@age = age
end
def age
@age
end
def age_difference_with(other_person)
(self.age - other_person.age).abs
end
protected :age
end
Run Code Online (Sandbox Code Playgroud)
我想知道的是两者的区别@age,并self.age在age_difference_with方法.
Ruby setters - 无论是由类创建(c)attr_accessor还是手动创建- 似乎是self.在类本身内访问时需要限定的唯一方法.这似乎使Ruby独自成为语言世界:
self/ this(像Perl,我认为是Javascript)self/ this是(C#,Java)self/ this(Ruby?)最好的比较是C#VS红宝石,因为这两种语言都支持这句法工作就像类的实例变量的访问方法:foo.x = y,y = foo.x.C#称它们为属性.
这是一个简单的例子; Ruby中的相同程序然后是C#:
class A
def qwerty; @q; end # manual getter
def qwerty=(value); @q = value; end # manual setter, but attr_accessor is same
def asdf; self.qwerty = 4; end # "self." is necessary in ruby?
def xxx; asdf; end # we can invoke nonsetters w/o "self." …Run Code Online (Sandbox Code Playgroud)