背景
method1 a b, c
となっている場合、cはどのメソッドの引数になっているでしょうか?
Ruby ってメソッドの引数にカンマやカッコをつけなくても良いのです。
ただ、このシステムの場合、不具合が起こると思うのです。
そこで、今回はそれを実際に試してみて検証しました。
下記の疑問について、なかなか記事がなくて不思議に思っていました。
問題がありそうな場面
例えば、
- パターン1
method1 a, b
は
method1(a, b)
という意味ですよね(methodって名前でメソッドを定義しようとしたらエラーになったので、method1としています。。)。
- パターン2
method1 a b
は
method1(a(b))
という意味ですよね。
ここまでは良いです(この時点で既にちょっと違和感がありますが。。初心者にはきついです。。)
ここで疑問
method1 a b, c
って、2つ可能性がないでしょうか?
- 可能性1
method1(a(b),c)
と
- 可能性2
method1(a(b,c))
の両方の可能性です。
- 前者はcがmethod1の第二引数 で、
- 後者はcがaの第二引数です。
ここで、確認するべきなのは、
- method1 のとる引数の数 と
- a のとる引数の数
です。単純にこれだけは確認する必要があります。(この時点で読む側からしてはきついです。)
ただ、可変長引数の場合はどうするのでしょうか?
おそらく、どちらかが優先されるのですが。。
では、上記のどちらのパターンになるのか検証してみます。
検証
def a *temp
p "aの引数の個数は"
p temp.size
end
def method1 *temp
p "method1の引数の個数は"
p temp.size
end
結果は、、、
method1 a 1, 2
# "aの引数の個数は"
# 2
# "method1の引数の個数は"
# 1
つまり、上記は
method1(a(1, 2))
と受け取られました。
上記の可能性2が採用されているようです。