2014-10-10 82 views
1

我想知道是否可以創建一個方法,比如Array#square(它將數組中的元素放在正方形中),允許使用可選的爆炸!標識符?創建允許爆炸和非爆炸選項的方法

這樣,接收器是否被永久修改只取決於是否用爆炸來調用該方法。例如,是否可以定義一個方法:

class Array 
    def square(!) 
    #code 
    end 
end 

或者,是否有必要創建兩個這樣的方法?

class Array 
    def square 
    #code 
    end 
    def square! 
    #code 
    end 
end 
+1

您的例子並不反映任何意義。 #sum不會修改數組。因此#sum!是毫無意義的。 – 2014-10-10 16:14:54

+0

您必須創建兩種方法。 '!'是方法名稱的一部分,不能是參數。 – 2014-10-10 16:26:23

+0

我爲這個不好的例子道歉。將數組中的元素平方作爲例子會是更好的選擇。我會嘗試編輯帖子。謝謝。 – xmdperezx 2014-10-10 16:41:51

回答

4

這是慣例定義兩個方法seperately,其中非危險版本調用爆炸方法上的重複:

class Array 
    def square 
    dup.square! 
    end 
    def square! 
    #code 
    end 
end 
+0

誰降低了正確答案?承認自己或面對我的憤怒。 – 2014-10-10 16:36:40

+0

誰downvoted?有人剛剛獲得了降低能力並希望行使其新發現的力量的能力。我儘可能地加了一個+1,因爲這是一個很好的答案。 – 2014-10-10 17:25:44