1
1

More than 3 years have passed since last update.

【Ruby】メソッドの引数の個数についての疑問と検証

Last updated at Posted at 2020-11-08

背景

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が採用されているようです。

1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1