作者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
推 leondemon:我覺得splat operator符號改成用^ 或許就不會發生這情形 05/28 12:18
→ godfat:那不是也撞到 xor 了? XD 05/28 17:09
推 leondemon:我的意思是考慮把splat operator換成別的不會互衝的符號 05/29 12:43
→ leondemon:這樣就可以避免和數學運算符號衝突到了... XD 05/29 12:44