:Rubyのインポートメソッドは常にプライベートですか?これは、最良の例で説明されて
file1.rb:
def foo
puts 123
end
file2.rb:
class A
require 'file1'
end
A.new.foo
がエラーを与えるだろう "':プライベートメソッド 'と呼ばfoo' を" 。
A.new.send("foo")
でこれを回避できますが、インポートされたメソッドを公開する方法はありますか?
編集:明確にするために、私は混同しないでください。includeとrequire。また、通常のインクルードを使用できない理由(多くの人が指摘しているとおり)は、これがメタプログラミングの設定の一部であるということです。私は、ユーザーが実行時に機能を追加できるようにする必要があります。例えば、彼は "run-this-app --include file1.rb"と言うことができ、アプリケーションはfile1.rbで書いたコードに基づいて異なる動作をします。申し訳ありませんが明らかに説明する必要があります。
編集:ジョルグの答えを読んだ後、私のコードは意図したとおりに正しく動作しないと分かり、彼は私の(誤った)質問に完全に答えます。私はstr=(entire file1.rb as string); A.class_exec(str)
のような何かをしようとしています。
「A.new.instance_eval {foo}」を試しましたか?それは私のためには機能しません(ruby 1.9.2)。 – knut
'requireと' include'を混同していますか? –
@knutでした。できます。 – alexloh