[无用] 运算子定义

楼主: 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