我尝试在 IRB(v0.9.6,Ruby 2.3.0)中使用 Refinement:
module Foo
refine Object do
def foo() "foo" end
end
end
using Foo # => RuntimeError: main.using is permitted only at toplevel
这基本上是文档中的确切设置(导致相同的错误)。
什么地方出了错?我该如何解决?
我尝试在 IRB(v0.9.6,Ruby 2.3.0)中使用 Refinement:
module Foo
refine Object do
def foo() "foo" end
end
end
using Foo # => RuntimeError: main.using is permitted only at toplevel
这基本上是文档中的确切设置(导致相同的错误)。
什么地方出了错?我该如何解决?
这是 IRb 的错误或错误功能。众所周知,由于 IRb 的实现方式非常骇人听闻,它在所有极端情况下的行为并不正确。
可能大家都知道的不兼容之处在于,在 Ruby 中,定义在顶层的方法变成了 的private
实例方法Object
,而在 IRb 中,它们变成public
了 的实例方法Object
。另一个明显的行为差异是,在 IRb 中,require_relative
它不起作用,因为它相对于当前文件进行搜索,但在 IRb 中,没有当前文件。
我相信,在接受的语法方面也存在一些差异,并且与局部变量以及它们何时被定义和未定义有关。
因此,也可能存在一些行为差异并不是不可想象的。改进。事实上,我自己也遇到过该错误消息,并且在 IRb 之外运行完全相同的代码,无论是使用ruby -e
、来自文件还是来自不同的 REPL,总是让它消失。