Ruby類的語法
回答
module Foo
class Bar
end
class ::Baz
end
end
限定Foo::Bar
和Baz
(未Foo::Baz
)。
這是一個類似的目錄是如何工作的:的/foo
給出的存在,而當前目錄爲/
,
cd foo
mkdir bar
mkdir /baz
創建/foo/bar
和/baz
(不/foo/baz
)。
初始::表示「即使我們可能在詞類或模塊的詞法上,從頂級命名空間定義這個新類」。當你在一個常量名的開頭使用它時,即使你在另一個模塊或類作用域內,你引用的(或創建的)常量不在該作用域內,而是處於最高級別(這些常量可以通過打印Object.constants)
注意,下面的「<」(用於超文本)可以是,它返回一類對象(在編譯時計算的)的任何表達式中列出。你甚至可以使用一個函數來返回超類。
能否請您詳細說明這一點:'最初::說,「即使我們可能是詞法類或模塊內,定義這個來自頂級命名空間的新類「。」 – OK999
遇到此https://www.chef.io/blog/2013/09/04/demystifying-common-idioms-in-chef-recipes/。它說:「在一些食譜中,你可能會看到:: File用於引用Ruby File類,爲什麼它不是」File「? 原因是因爲Chef有它自己的名爲File的類。是Chef中稱爲File的資源和提供者類。爲了避免歧義 - 模糊導致錯誤 - 每當我們想引用Ruby的File類時,我們使用:: File。「根據你的回答和這個博客,ruby是否有另一個類調用'廚師'? – OK999
@ OK9999在寫一個廚師食譜時,你會在純粹的Ruby代碼中使用DSL的'Chef :: Recipe'實例。這就是爲什麼你需要避免DSL方法和純Ruby方法之間的歧義 – Tensibai
而且,這裏是如何常量擡頭的一個例子:
A = 1
module X
A = 'hello'
class Y
A = [1, 2, 3]
def show
p A
p ::A
end
end
end
X::Y.new.show
--output:--
[1, 2, 3]
1
你可以實例化一個模塊嗎?我遇到過很多文檔說模塊不能實例化。這是一個這樣的鏈接:http://stackoverflow.com/questions/151505/difference-between-a-class-and-a-module或者,是這樣的,我們可以實例化一個類存在於模塊內部,就像你完成了。 ' X :: Y.new.show' ...我可以使用irb來測試你的例子 – OK999
你不能實例化一個模塊。你可以使用一個類似於單例類的模塊類型(通過直接調用它定義的方法),或者你可以將一個模塊作爲一個mixin包含在類中(並且實例化該類)。 – Amadan
OK999,'X :: Y'是一個類,你可以調用new()。模塊可以用作* namespaces *,在這裏就是這種情況。命名空間被用來避免名稱衝突。如果其他開發人員實現了一個名爲Y的類,他將在其唯一的名稱空間名稱中定義它。 – 7stud
- 1. ruby中的類方法語法
- 2. Ruby類似救援的語法
- 3. Ruby f.select:分配css類的語法?
- 4. Ruby中的語法「&& =」
- 5. s.split('')。?。?的Ruby語法
- 6. Ruby的語法時
- 7. Ruby/Rails語法
- 8. 語法錯誤Ruby
- 9. Ruby if else語法
- 10. 的Ruby語法:位掩碼
- 11. 奇怪的Ruby語法?
- 12. 理解的Ruby語法
- 13. heredoc裏面的Ruby語法?
- 14. 的Ruby語法亂說
- 15. 的Ruby語法怪異
- 16. 的Ruby語法(導軌型)
- 17. 的Ruby語法混亂
- 18. '幹我的Ruby語法
- 19. ruby的更新語法
- 20. Ruby Hashes的括號語法
- 21. 的Ruby語法解釋
- 22. Ruby on Rails:CSS中的語法?
- 23. 用於調用類中方法的Ruby語法
- 24. Ruby語言的Vim語法高亮1.9
- 25. Ruby - 類方法
- 26. NetBeans Ruby語法高亮爲Ruby 1.9?
- 27. Ruby的語法調用方法
- 28. Ruby類類型和case語句
- 29. ruby * args語法錯誤
- 30. 瞭解Ruby和Sinatra語法
所以'Baz'類不在'Foo'模塊名稱空間內? – OK999
是的。在你的問題中,'OpsCode'不在'Recipe'裏面。 – Amadan