🙄
[Bug #19731] 1行def + 後置 if の優先順位の話
[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)
と書く必要がある - 優先順位難しいね
Discussion