当前位置:  开发笔记 > 后端 > 正文

当我在IRB中使用精炼时,为什么我得到"main.using只允许在顶层使用"?

如何解决《当我在IRB中使用精炼时,为什么我得到"main.using只允许在顶层使用"?》经验,为你挑选了1个好方法。

我试图在IRB中使用Refinement(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

这基本上是文档中的确切设置(导致相同的错误).

什么地方出了错?我该如何解决?



1> Jörg W Mitta..:

这可能是错误或错误的IRb.众所周知,由于IRb实施的方式非常糟糕,因此对于所有角落情况都不能正常运行.

可能每个人都知道的不兼容性是,在Ruby中,在顶层定义的private方法成为实例方法Object,而在IRb中,它们成为public实例方法Object.另一个明显的行为差异是,在IRb中,require_relative它不起作用,因为它相对于当前文件进行搜索,但在IRb中,没有当前文件.

我相信,在接受什么语法方面也存在一些差异,以及与局部变量有关的内容以及它们何时被定义和未被定义.

因此,可能也存在一些行为差异并不是不可想象的.改进.实际上,我自己也遇到过这条错误消息,并且在IRb外部运行完全相同的代码,无论是使用ruby -e,还是来自文件,还是来自不同的REPL,总是让它消失.

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有