🙄

[Bug #19731] 1行def + 後置 if の優先順位の話

2024/05/14に公開

[Bug #19731] Can’t call an instance method inside an Endless method definition

  • 以下のような1行メソッド定義だと意図しない挙動をしているというバグ報告
class A
  # error: undefined local variable or method `params' for A:Class (NameError)
  def show = (puts 'ok' if params)

  def params
    42
  end
end

A.new.show
  • 上記のコードの意図としては def show =(puts 'ok' if params) となってほしい
  • ただ実際には (def show = puts 'ok') if params と解釈されるので上記のようなエラーになっている
    • params がなくてエラーになっている
    • def = の方が優先順位が高い
  • 回避する場合は def show = (puts 'ok' if params) と書く必要がある
  • 優先順位難しいね
GitHubで編集を提案

Discussion