1

時々、次のようなコードが表示されます。

module Elite

    module App
        def app
            'run app'
        end
    end

    module Base
        def base
            'base module'
        end
    end

    class Application
        include Elite::Base #Include variant A
        include ::Elite::App #Include variant B

        def initialize(str=nil) 
            puts "Initialized with #{str}"
            puts "Is respond to base?: #{base if self.respond_to?(:base)}"
            puts "Is respond to app?: #{app if self.respond_to?(:app)}"

        end
    end

    class Store < ::Elite::Application

        def initialize(str=nil)
            super #Goes to Application init
        end
    end
end

elite = Elite::Store.new(:hello)

でも と と と の何が違うのかわからないコーディングclass Store < ::Elite::Applicationスタイル だけなのか、それとも何か違うのかclass Store < Elite::Application?include Elite::Baseinclude ::Elite::App

クラス/モジュールの前に何をし::ますか? :: クラス/モジュールの名前空間 (モジュール名) を消去しますか? 動作しますが、class Store < Applicationこれは動作しません: class Store < ::Application. 違いを教えてください...ありがとう!

4

1 に答える 1

3

'::' はベース (グローバル) スコープ演算子です。

したがって、'::Application' はベース アプリケーションを参照し、'Application' は現在のスコープ内のアプリケーションを参照します。

例えば

class Application # Class 1
end

class Smile
  class Application # Class 2
  end

  ::Application # references class 1
  Application # references class 2 (The application in my current scope)
end
于 2012-05-10T20:28:24.510 に答える