Использование "::" вместо "module ..." для пространства имен Ruby - PullRequest
10 голосов
/ 03 августа 2011

Есть ли в Ruby разница между написанием class Foo::Bar и module Foo; class Bar для пространства имен?Если так, то что?

Ответы [ 2 ]

9 голосов
/ 03 августа 2011

Если вы используете class Foo::Bar, но модуль Foo еще не определен, будет сгенерировано исключение, тогда как метод module Foo; class Bar определит Foo, если он еще не был определен.

Кроме того, с помощью формата блока вы можете определить несколько классов:

module Foo
  class Bar; end
  class Baz; end
end
7 голосов
/ 03 августа 2011

Также обратите внимание на этот любопытный кусочек Ruby-ismness:

FOO = 123

module Foo
  FOO = 555
end

module Foo
  class Bar
    def baz
      puts FOO
    end
  end
end

class Foo::Bar
  def glorf
    puts FOO
  end
end

puts Foo::Bar.new.baz    # -> 555
puts Foo::Bar.new.glorf  # -> 123
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...