为什么我在 IRB 中使用 Refinement 时得到 "main.using is permitted only at toplevel"?
Why did I get "main.using is permitted only at toplevel" when I used a Refinement in IRB?
我尝试在 IRB 中使用优化(v0.9.6,Ruby 2.3.0):
module Foo
refine Object do
def foo() "foo" end
end
end
using Foo # => RuntimeError: main.using is permitted only at toplevel
这基本上是 the exact setup from the documentation(导致相同的错误)。
出了什么问题?我该如何解决这个问题?
这可能是 IRb 的错误或功能不当。 well-known 由于 IRb 的实现方式非常骇人听闻,它对所有 corner-cases.
的行为并不正确
可能每个人都知道的不兼容性是,在 Ruby 中,定义在 top-level 的方法成为 Object
的 private
个实例方法,而在 IRb 中,它们成为 public
Object
的实例方法。另一个明显的行为差异是,在 IRb 中,require_relative
不起作用,因为它相对于当前文件进行搜索,但在 IRb 中, 没有 当前文件。
我认为,在接受哪些语法方面也存在一些差异,这与局部变量有关,以及它们何时定义和未定义。
因此,可能也存在一些行为差异并不是不可想象的。改进。事实上,我自己也遇到过该错误消息,并且 运行 IRb 之外的完全相同的代码,无论是 ruby -e
,来自文件,还是来自不同的 REPL,总是让它消失。
我尝试在 IRB 中使用优化(v0.9.6,Ruby 2.3.0):
module Foo
refine Object do
def foo() "foo" end
end
end
using Foo # => RuntimeError: main.using is permitted only at toplevel
这基本上是 the exact setup from the documentation(导致相同的错误)。
出了什么问题?我该如何解决这个问题?
这可能是 IRb 的错误或功能不当。 well-known 由于 IRb 的实现方式非常骇人听闻,它对所有 corner-cases.
的行为并不正确可能每个人都知道的不兼容性是,在 Ruby 中,定义在 top-level 的方法成为 Object
的 private
个实例方法,而在 IRb 中,它们成为 public
Object
的实例方法。另一个明显的行为差异是,在 IRb 中,require_relative
不起作用,因为它相对于当前文件进行搜索,但在 IRb 中, 没有 当前文件。
我认为,在接受哪些语法方面也存在一些差异,这与局部变量有关,以及它们何时定义和未定义。
因此,可能也存在一些行为差异并不是不可想象的。改进。事实上,我自己也遇到过该错误消息,并且 运行 IRb 之外的完全相同的代码,无论是 ruby -e
,来自文件,还是来自不同的 REPL,总是让它消失。