2016-09-21 9 views
1

私はシェフと働いており、私はRuby File.dirname()クラスメソッドを使用する必要がある状況に遭遇しました。問題は、シェフは自分自身のChef::Resource::Fileクラスであり、ruby_blockリソース内でコードを実行すると解決されます。名前の競合が発生した場合、どのようにして明示的にコア名前空間Fileクラスを参照できますか?Rubyでコアクラスを明示的に参照するには?

答えて

6

::のクラス名の前に、つまり::Fileを付けます。

+0

素晴らしいです、ありがとうございます! –

1

シェフ自身がここで何かをオーバーロードしていないことに注意してください。問題は、あなたが::Chef::Resource::RubyBlockであり、 "ファイル"でシンボルルックアップをしようとしていることです。 Ruby言語は上向きに検索し、が見つかる前にを見つけます。正しい解決策は::File.dirnameを使用することです。これは単純にRubyの機能(これは簡単には変更できません)です。

+0

おそらく、ここで使用するのは適切な用語ではありませんでした。私はシェフが明らかにFileクラスを持っていたことを意味しました.Fileクラスは:: Fileクラスの代わりに解決していました。私は、複数の関数やメソッドに同じ名前を使用することと同じように、「オーバーロード」を意味しますが、使用可能な他のクラスに「踏みつぶす」クラスを参照するときは、より良い用語を使用することはできません。 –

+0

いずれの場合も、訂正していただきありがとうございます。元の質問を編集して、私が経験していた振る舞いを表す別のモニカを使用しました。 –