作者AIGecko (师大猫耳控)
看板Ruby
标题[无用] 运算子定义
时间Sat Nov 14 00:59:28 2015
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
於是我们终於可以得到此运算子的结果
但是破坏了原本语法的糖衣
很不方便
是个很无用的运算子定义方式
--
CPU: Pentium4 HT 631
RAM: DDR400 1G*4
MB: MS-7133
HDD: Seagate 40G + WD 40G + Hitachi 120G
DVD: ASUS DRW-24B3ST
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.171.97.185
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Ruby/M.1447433987.A.12E.html
1F:推 fr373969: 推无用 11/14 04:26
※ 编辑: AIGecko (1.171.99.80), 11/14/2015 16:39:38