2013-12-12 52 views
0

有人問是否可以定義一個需要多個參數的setter方法,但是搜索它似乎是不可能的。如何使用不帶參數的setter方法

我說,setter方法不能採取一個以上的說法,但後來仔細想想,想知道我是否比不帶任何參數實際上可以定義一個setter:

class Test 
    def self.args= 

    end 
end 

和Ruby接受它,可能原因沒有理由不接受它。我可以用它做任何事情嗎?

回答

1

你不能用它作爲setter,它甚至不是非常有用的方法。甚至使該方法運行的唯一方法是使用send或創建一個Method實例,因爲正常的消息發送語法不允許消息包含「=」字符。

所以,你在技術上可以有這樣的代碼:

class Foo 
    def bar=() 
    puts "Hi, mom!" 
    end 
end 

foo = Foo.new 
foo.send(:bar=) 

,它會打印出「嗨,媽媽!」如預期。

但你能用它做什麼嗎?那麼,我想你可以向你的所有朋友吹噓你的不可置信的二傳手,它沒有設置任何東西。除此之外,不,對任何事情都沒有用處。

1

你可以做任何其他沒有參數的實例方法。如果你在=運營商的範圍內調用它,那麼我認爲你不能通過它的一個塊,但你可以通過它與send一起通過塊。

但是請注意,您的示例在單例類中定義了setter方法,而setter方法通常定義爲實例方法。

相關問題