gpt4 book ai didi

Ruby 错误地解释类命名空间

转载 作者:数据小太阳 更新时间:2023-10-29 08:59:42 25 4
gpt4 key购买 nike

我的代码类似于以下片段:

require_relative 'class/foo'
require_relative 'class/bar'
require_relative 'class/baz'

class MyClass
def initialize(arg)
...

%w(wordone wordtwo).each do |word|
Foo.public_send(word.to_sym, arg)
Bar.public_send(word.to_sym, arg)
Baz.public_send(word.to_sym, arg)
end
end
end

在这三个要求中的每一个都包含如下模板的代码:

class Foo
def self.wordone(arg)
# do stuff
end

def self.wordtwo(arg)
# do stuff
end
end

这对 FooBar 非常有效,但是一旦它命中 Baz:

NameError: uninitialized constant MyClass::Baz
Did you mean? Baz

我明确指定了 Baz 而不是 MyClass::Baz。为什么 Ruby 会随机误解第三个对象方法调用的 namespace 而不是前两个?

我还应该提到,如果我改变了:

Baz.public_send(word.to_sym, arg)

到:

Baz.wordone(arg)

然后它就可以完美地用于那个方法调用,但我显然需要循环遍历该类的多个方法调用。因此,Ruby 的命名空间错误解释似乎与在对象方法上使用 public_send 有关。

这发生在 Ruby 2.3.1p112 上。

最佳答案

整理来自 OP 的我的(显然有帮助的)评论:

基本上这里发生的事情是 Ruby 在顶层找不到类 Baz,所以它在 MyClass 下寻找(它实际上尝试在 MyClass 下寻找 首先,然后检查顶层;错误消息告诉您它无法在任一命名空间中找到它)。

关于Ruby 错误地解释类命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39400349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com