Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

番号指定パラメータを予約語に追加します #2509

Merged
merged 2 commits into from
Apr 14, 2021

Conversation

ima1zumi
Copy link
Contributor

@ima1zumi ima1zumi commented Apr 5, 2021

Ruby 3.0.0 から番号指定パラメータ(Numbered parameter)は変数名、メソッド名として使用できなくなりました。
ほかの予約語と異なり def キーワードでメソッド定義できないため、別段落で説明を書きました。

irb(main):001:1* def if
irb(main):002:1*   'ifif'
irb(main):003:0> end
=> :if
irb(main):004:1* def _1
irb(main):005:1* 'numbered parameter'
irb(main):006:0> end
/Users/mi/ghq/github.com/ruby/irb/lib/irb/workspace.rb:116:in `eval': (irb):4: _1 is reserved for numbered parameter (SyntaxError)
        from /Users/mi/ghq/github.com/ruby/irb/exe/irb:11:in `<main>'

fix: #2456
ref : #2458
プロと読み解く Ruby 3.0 NEWS - クックパッド開発者ブログ

予約語と異なり def キーワードでメソッド定義できないため、別段落で説明を書きました。
@osyo-manga
Copy link
Contributor

osyo-manga commented Apr 5, 2021

📝 _1 というメソッド名は define_methodattr_accessor などで定義可能

# これは NG
# error: _1 is reserved for numbered parameter
def _1
  42
end
define_method(:_1) {
  42
}
# これはメソッドの _1 を参照する
p _1
# => 42

# これは番号指定パラメータを参照する
p 1.tap { _1 }
# => 1
class  X
  # attr_accessor 経由でメソッドを定義できる
  attr_accessor :_1
end

x = X.new

# これはメソッドの _1 を参照する
x._1 = 42
pp x._1
# => 42

x.instance_eval {
  # これは番号指定パラメータを参照する
  p _1
  # => #<X:0x0000563e6b8b4fe8 @_1=42>
}

@@ -71,3 +71,9 @@ Rubyのソースコードにドキュメントを埋め込む事ができます
とは見なされません。また、def のあとやメソッド呼び出しの
ピリオドのあとなどメソッド名であるとはっきり分かる場所では
メソッド名として用いることができます。

#@since 3.0.0
また、番号指定パラメータはクラス名、変数名、def で定義するメソッド名に用いることはできません。
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

クラス名にはそもそもアンダースコアの名前は使えないので、ここでは触れなくても良いかなと思ったのですがどうでしょうか?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

たしかにそうですね‥!
6537534 で修正しました。

@znz znz requested a review from pocke April 13, 2021 13:07
Copy link
Member

@pocke pocke left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 👍

@pocke pocke merged commit a45db52 into rurema:master Apr 14, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

_1〜_9を予約語として追加すべきではないか
3 participants