作者godfat (godfat 真常)
看板Ruby
标题Re: [问题] bug?
时间Sat May 28 00:39:54 2011
: → leondemon:问一下 参数接*2代表什麽意思? 05/28 00
首先那个 * 叫做 splat operator, 接下来看程式解释:
def f a
p a
end
f(*0)
不知道能不能说就如同预期的,印出 0, 虽然 0 并不是 array.
但如果 0 可以转换成 array 呢?
class Fixnum
def to_a
[1]
end
end
f(*0)
在这边,ruby 发现 0.respond_to?(:to_a) 是 true, 就会把 0 透过 to_a
转成 array. 转出的结果是 [1], 套到 f 上面,得 a 是 1, 这里印出 a.
也就是说,splat 不一定只能用在 array 上,任何 custom class 都行。
def g a, b, c
p a, b, c
end
class C
def to_a
[1, 2, 3]
end
end
g(*C.new)
这边就会一如预期,印出 1
2
3
了
--
「行け!Loki!」
(rocky ロッキー)
-Gurumin ぐるみん 王子? XD
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.160.129
1F:推 leondemon:我觉得splat operator符号改成用^ 或许就不会发生这情形 05/28 12:18
2F:→ godfat:那不是也撞到 xor 了? XD 05/28 17:09
3F:推 leondemon:我的意思是考虑把splat operator换成别的不会互冲的符号 05/29 12:43
4F:→ leondemon:这样就可以避免和数学运算符号冲突到了... XD 05/29 12:44