1. ホーム
  2. ruby

[解決済み] Ruby 2の名前付きパラメータ

2022-03-01 11:04:52

質問

Ruby 2.0の名前付きパラメータがどのように機能するのか、完全に理解できていません。

def test(var1, var2, var3)
  puts "#{var1} #{var2} #{var3}"
end

test(var3:"var3-new", var1: 1111, var2: 2222) #wrong number of arguments (1 for 3) (ArgumentError)

は、ハッシュのように扱われます。そして、とても面白いことに、Ruby 2.0で名前付きパラメータを使うには、私は しなければならない はデフォルト値を設定します。

def test(var1: "var1", var2: "var2", var3: "var3")
  puts "#{var1} #{var2} #{var3}"
end

test(var3:"var3-new", var1: 1111, var2: 2222) # ok => 1111 2222 var3-new

これは、Rubyが以前から持っていたデフォルトのパラメータ値での動作と非常によく似ています。

def test(var1="var1", var2="var2", var3="var3")
  puts "#{var1} #{var2} #{var3}"
end

test(var3:"var3-new", var1: 1111, var2: 2222) # ok but ... {:var3=>"var3-new", :var1=>1111, :var2=>2222} var2 var3

なぜそうなるのか、その仕組みはほぼわかっています。

でも、ちょっと気になるんです。 ねばならない 名前付きパラメータを使用する場合、パラメータにデフォルト値を使用するのですが?

そして、この2つの違いは何なのか、誰か教えてください。

def test1(var1="default value123")
  #.......
end

def test1(var1:"default value123")
  #.......
end

解決方法は?

最後に掲載した例は誤解を招きます。動作が似ていることに反対です。最後の例では、引数のハッシュを最初のオプションのパラメータとして渡していますが、これは別物です!

デフォルト値を持ちたくない場合は nil .

良い書き込みを読みたい方は、"をご覧ください。 Ruby 2 キーワード引数 となります。