[無用] 運算子定義

作者: AIGecko (師大貓耳控)   2015-11-14 00:59:28
Ruby的運算子可以自行定義
一般來說1元運算子是不會傳參數的
像是以下的程式碼
class C
def +@
return 5566
end
end
> +C.new
#=> 5566
但是今天偶然嘗試了把1元運算子加上參數
class C
def +@(x)
return x
end
end
於是原先的呼叫就會失敗
> +C.new
#=> ArgumentError: wrong number of arguments (0 for 1)
from (irb):3:in `+@' 呼叫+@的參數過少
那假如踹踹其他方法呢?
> +C.new(100)
#=> ArgumentError: wrong number of arguments (1 for 0)
from (irb):8:in `initailize' 呼叫建構子的參數過多
> +C.new,100
#=> SyntaxError: (irb):10: syntax error, unexpected ',',
expecting end-of-input 語法錯誤
那到底要如何呼叫這個方法呢?
> C.new.+@(100)
#=> 100
於是我們終於可以得到此運算子的結果
但是破壞了原本語法的糖衣
很不方便
是個很無用的運算子定義方式
作者: fr373969 (Brian)   2015-11-14 04:26:00
推無用

Links booklink

Contact Us: admin [ a t ] ucptt.com