の解釈:これらの3つのそれぞれにおいてRubyは間違って、私は次のコードのようなコード持っているクラスの名前空間
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
が必要です。このテンプレートのようなコード:これはFoo
ために完全に正常に動作
class Foo
def self.wordone(arg)
# do stuff
end
def self.wordtwo(arg)
# do stuff
end
end
そしてBar
が、一度ヒットしたらBaz
:
NameError: uninitialized constant MyClass::Baz
Did you mean? Baz
明確にBaz
を指定し、MyClass::Baz
を指定しません。なぜRubyは最初の2つではなく、3番目のオブジェクトメソッド呼び出しの名前空間をランダムに誤って解釈していますか?
私も、私が変更した場合ことを言及する必要がありますに
Baz.public_send(word.to_sym, arg)
:
Baz.wordone(arg)
それはその1つのメソッド呼び出しのために完璧に動作しますが、私は明らかにするために、複数のメソッド呼び出しをループする必要がありますそのクラス。したがって、Rubyの名前空間の誤解は、オブジェクトメソッドでpublic_send
の使用にリンクされているようです。
これはRuby 2.3.1p112で発生しています。
ええ、おそらく、あなたのクラス 'クラス'を呼び出さないでください。 :-) – mwp
@mwpスニペットをClass以外のものに編集することができます。私はあまりにも私が推測する書式を変更する必要があります。 –
生殖可能な完全な例を教えてください。私のクリスタルボールが壊れています。 – Nax