🦔
[bugs.ruby][Bug #20342] load したときにエラーになる場合があるバグ報告
[Bug #20342] Top level public
, private
and ruby2_keywords
do not work in wrapped load
- 以下のようにトップレベルで
public
を使っているファイルを#load
の第二引数にtrue
を渡した状態で読み込むとエラーになるバグ報告
# load.rb
public def func = 42
# load の第二引数に true を渡した状態でトップレベルに public があるファイルを読み込むとエラーになる
# error: `public': undefined method `func' for class `Object' (NameError)
load "load.rb", true
-
true
を渡した場合は無名モジュール内で読み込んだファイルが定義されるからなんですかね? - このバグの PR は既に出てます
- ちなみに
load
の第二引数にtrue
を渡すと無名モジュール内でload
されます
# load.rb
def func = 42
class X
def get
func + func
end
end
# 通常の load ではトップレベルに load.rb の内容が定義される
load "load.rb"
# load のトップレベルで定義したメソッドやクラスが参照できる
pp func
# => 42
pp X.new.get
# => 84
# true を渡した場合は無名モジュール内でメソッドやクラスが定義される
load "load.rb", true
# なのでメソッドやクラスは参照できない
# error: undefined local variable or method `func' for main (NameError)
pp func
# error: uninitialized constant X (NameError)
pp X.new.get
- トップレベルを汚染せずに読み込みたい場合に利用できおます
Discussion