読者です 読者をやめる 読者になる 読者になる

Ruby の func [] と func[] の違い

Ruby

Ruby ではメソッドの呼び出しに () を省略することができるので、次のような奇妙なコードを記述することが出来ます。

def func *ary
    ["homu", "mami", "mado"]
end

p func [1]
# => ["homu", "mami", "mado"]
p func[1]
# => "mami"

これは func [1]func[1] を引数として渡しているのに対し、func[1]func の戻り値に対して [1] を呼び出しているからです。 明示的に括弧を書くと

def func *ary
    ["homu", "mami", "mado"]
end

p func([1])
# => ["homu", "mami", "mado"]
p func()[1]
# => "mami"

こんな感じになります。
DSL なんかを書いてる時にうっかりハマりそうなので注意する必要が有ります。