LoginSignup
9
10

More than 5 years have passed since last update.

Ruby 2.0.0 で省略不可なキーワード引数ってどうやって定義するの?

Last updated at Posted at 2014-01-02

2014-01-06 追記

@yancya さんよりコメントにて、Ruby 2.1.0 以降では以下のように定義できると教えていただきました。

kwarg4.rb
def foo(bar:)
end

以下はオリジナルの投稿をそのまま残しておきます。


Ruby 2.1.0 にはまだ手をだしていません。

例えばこんなコードがあります。

kwarg1.rb
class Foo
  def foo(bar: 'BAR')
    p bar
  end
end

Foo.new.foo

foo メソッドを、キーワード引数 bar を省略した状態で実行しています。
実行結果は以下のようになります。

$ ruby kwarg1.rb
"BAR"

デフォルト値である 'BAR' が出力されます。
デフォルト値が nil なら同様にそれが出力されることになります。

これを、省略不可にしたい場合ってどうすればいいんでしょう。

今のところ以下のようにしています。

kwarg2.rb
class Foo
  def foo(bar: _)
    p bar
  end
end

Foo.new.foo

デフォルト値にアンダースコアを指定しています。
これを実行した結果は以下の通り。

$ ruby kwarg2.rb
kwarg2.rb:2:in `foo': undefined local variable or method `_' for #<Foo:0x007fcd69b859f0> (NameError)
        from kwarg2.rb:7:in `<main>'

_ をローカル変数、またはメソッドとして探索した結果見つからず、NameError になっています。
省略時にエラーになる、という意味では一応の目的を果たせました。

ですが、これはもちろん _ メソッドが定義されていた場合はエラーになりません。

kwarg3.rb
class Foo
  def foo(bar: _)
    p bar
  end

  def _
  end
end

Foo.new.foo

実行結果は以下の通り。

$ ruby kwarg3.rb
nil

エラーは起こらず、_ メソッドの返り値がそのまま出力されてしまいます。

言語として用意されている方法ってないんでしょうか。

9
10
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
9
10