2013-03-16 58 views
3

我明白,Ruby支持调用方法的简短风格,即:1.+(2)1+2相同(我仍然认为它是否与我的情况有关),但我真的很困惑为什么attr_accessor方法既不重复(当然,他们不应该作为writer在其名称与=不同)也不它们与任何不同(除了writer需要的参数),而访问它们外面活动对象。attr_accessor或自定义方法重复方法名称混淆

我的问题是包含在这个代码(在第二个评论)

class Test 
    def initialize(number) 
    @number = number 
    end 
    def number 
    @number 
    end 
    def number=(n) 
    @number = n 
    end 
end 

t = Test.new(12) 

puts t.number # => 12 
t.number = 13 # Why does it do what t.number=(13) should do 
puts t.number # => 13 

我不知道为什么t.number = 13作品,当它指向应该只返回一个数字的方法,而且它是如何设定新当不调用t.number=(13)时的值。

回答

1

t.number = 13只是为t.number=(13)的简写,它们有效地在Ruby中相同的语句。

attr_accessor :b创建下列两种方法是等效的:

def b 
    @b 
end 
def b=(new_val) 
    @b = new_val 
end 

因此,在你的代码示例,您可以用attr_accessor :number

+0

感谢更换两种方法#number#number=,但为什么这个代码不工作然后? 'def show =(str) puts str end show =“confused”' – Davit 2013-03-16 23:20:02

+1

Ruby将语句show =“confused”设置为局部变量,而不是方法调用,因为没有对象+ 'show'前的句号('.')。如果你说'object.show ='confused'',它将它解释为一个方法调用,但没有'object.'它只是设置一个局部变量 – 2013-03-16 23:20:51

+0

没关系,但'show =(“confused”)'既不可用,请告诉我这太 – Davit 2013-03-16 23:22:04