2455


Chefの情報を探していると

[code]

    ::Chef::Recipe.send(:include, Foo::Helper)
    
[/code]

という表記のものに出合ったのですが、クラス名の先頭に`::`をつけるとどのような効果になるのでしょうか？

ドキュメントを探してみたのですがうまく検索する方法がわかりませんでした。


CC BY-SA 3.0
2014-12-24T01:07:45.197
2446
2014-12-24T01:47:53.257
3271
question
ruby chef
ruby でクラス名の先頭に :: がつくときの意味について


先頭の::の意味については <http://docs.ruby-lang.org/ja/2.0.0/doc/symref.html#colon>
に説明があります。

> ::DateTime  
>  定数のスコープ演算子で、トップレベルの定数であることを示す。

定数の名前解決はクラス・モジュールの内側から外側に向かって行われます。

[code]

    A = "::A"
    
    class Foo
        A = "Foo::A"
    
        class Bar
            A = "Foo::Bar::A"
    
            p A         # => "Foo::Bar::A"
            p Foo::A    # => "Foo::A"
            p ::A       # => "::A"
        end
    end
    
[/code]

Barクラスの中からAを参照する場合、何も指定しない場合はいちばん内側にあるFoo::Bar::Aが探索されます。

Foo::Aのようにクラス名を先頭につけることで外側の定数を参照できますが、トップレベルのAはクラス内にありません。
このような場合に::だけを先頭につけることによって一番外側のAを参照することができます。


CC BY-SA 3.0
2014-12-24T01:42:27.070
2455
2014-12-24T01:47:53.257
2014-12-24T01:47:53.257
3639
3639
2446
answer