2013-03-16 62 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