您是否可以從名爲Trung.NguyenThe
的類創建對象,因爲NguyenThe
不是一種方法?我可以在Ruby/Java/C#中創建一個像這樣的對象嗎?
回答
在Java C#和Ruby中,您不能在名稱中創建帶有.
的變量。
// C# and Java
Object Trung.NguyenThe = "";
# Ruby
Trung.NguyenThe = ""
該變量名在所有三種語言中都是非法的。
如果您想要做類似的事情,請使用下劃線_
。
// C# and Java
Object Trung_NguyenThe = "";
# Ruby
Trung_NguyenThe = ""
雅,謝謝你的回答。我知道這樣做是非法的,對於雄心勃勃的問題抱歉。 – 2010-11-09 17:29:54
@Dark,不客氣。你的意思是「模棱兩可的問題」? – jjnguy 2010-11-09 17:30:43
是的,我確定它更清晰。而且,我可以在Ruby課堂上課嗎? (正如下面的人給我看的) – 2010-11-09 17:42:37
首先,對象沒有名字。類和變量都可以。
所以我會假設你問有關命名類與週期(根據您最後的評論)...
直答案是「不」,而是一個可以模仿使用的命名空間/包或內部類。
命名空間:
namespace Trung {
public class NguyenThe {}
}
// Usage:
namespace Whatever {
public class Client {
public main() {
var x = new Trung.NguyenThe();
}
}
}
內部類:
namespace Whatever {
public class Trung {
public class NguyenThe {}
}
// Usage:
public class Client {
public main() {
var x = new Trung.NguyenThe();
}
}
}
(注:這是C#代碼,但我敢肯定,同樣可以用Java來完成我想Ruby有相同概念也是如此)。
謝謝,這非常有幫助。 – 2010-11-09 17:27:21
你可以在Ruby中做到這一點嗎? – 2010-11-09 17:41:06
@Dark Cloud:(關於Ruby)種。您可以在ruby中定義模塊內部的模塊,但解析模塊成員的ruby語法使用'::'而不是'.'(這在Ruby中是有意義的;模塊就像一個靜態類,您可以使用'.'只解析實例/對象成員)。所以它會成爲'Trung :: NguyenThe()'(或'Trung :: NguyenThe',這在Ruby中是一樣的)。 – rsenna 2010-11-09 21:17:30
當然。創建一個名爲Trung的包。在這個包裏面創建一個叫NguyenThe的類。
或者你是否假設Trung已經是班級名稱?
在Ruby中,沒有類名稱這樣的東西。類就像每個其他對象一樣,像其他變量一樣分配給變量。
Trung.NguyenThe
是不是合法的變量名,因此這是不可能的:
class Object
klass = Class.new do
def to_s; 'Hello' end
end
const_set :'Trung.NguyenThe', klass
# NameError: wrong constant name Trung.NguyenThe
end
您可以,當然,創建這是爲了響應NguyenThe
消息一個類的對象和對象分配到變量命名Trung
,但是這不是你問什麼:
klass = Class.new do
def to_s; 'Hello' end
end
(Trung = Object.new).define_singleton_method(:NguyenThe) { klass }
puts Trung.NguyenThe.new
# Hello
在C#和Java,在週期類名是非法的爲好。 C#有一個轉義機制,允許您使用其他保留字作爲名稱,但是這種機制不能使用非法名稱,只能使用保留字。
在Java名稱中有更多符號自由的提議,但到目前爲止還沒有實現。
對不起,我不是真正的rubist,但我確實相信Ruby有類名。是的,一個類是一個對象,但這並不意味着它沒有關聯的名稱 - 即使這裏的「name」的概念與靜態語言有點不同......您甚至可以動態獲取通過調用'obj.class.name'來調用任何對象的類名...此外,類名是一個常量,所以它*應該是不可變的。 – rsenna 2010-11-09 21:27:11
'Class#name'只是簡單的調試方法。事實上,它通過掃描所有常量並檢查該類是否已分配給其中的一個並返回該常量的名稱。換句話說:這只是該類所分配的變量的名稱。顯然,這意味着一個類的名字*可以改變,這取決於它被分配給哪個變量:'a = Class.new; p a.name; A = a; p a.name'。 – 2010-11-09 22:25:45
- 1. 我可以在SystemVerilog中創建一個const對象嗎?
- 2. 我可以在對象中創建一個方法嗎?
- 3. 我可以在C#中像這樣分配一個bool嗎?
- 4. 可以在postgre中像這樣創建foreach循環嗎?
- 5. 可以在老一代中創建一個對象嗎?
- 6. 我們可以創建一個接口的對象嗎?
- 7. 我怎麼能創建一個矩陣,所以我可以像這樣$ array [$ key]
- 8. 我可以用查詢結果創建一個新對象嗎?
- 9. 我可以做一個像這樣的正則表達式嗎?
- 10. 我可以自定義一個像這樣的UIPickerView嗎?
- 11. Javascript中的對象可以像PHP中的ArrayAccess/ArrayObject一樣嗎?
- 12. 可以這樣做嗎?這是不是很好(在同一個對象中有一個對象)?
- 13. 我可以刪除在另一個進程中創建的HBITMAP對象嗎?
- 14. 創建一個可爲空的對象。可以做到嗎?
- 15. 我可以像這樣投射一個數組嗎?
- 16. 我可以在JavaScript中創建自己的數組對象嗎?
- 17. 我可以在Queue中創建ArrayList的任何對象嗎?
- 18. 我可以從一個導入的包創建一個類的對象嗎
- 19. 創建可以像數組和對象一樣使用的JavaScript數組對象
- 20. IDL可以像這樣創建一個輪廓圖顏色條嗎?
- 21. 可以使用TreeView在WPF中創建一個像這個示例一樣的導航控件嗎?
- 22. 我可以這樣做嗎?試圖加載自己的對象
- 23. 創建一個像這樣的滑塊?
- 24. 我可以在Flask中創建更多會話對象嗎?
- 25. 我可以像這樣創建從元類派生的子類嗎?
- 26. 變量可以像對象一樣對待嗎?
- 27. Xamarin Android:我可以不創建我的MainActivity的新對象嗎?
- 28. 我可以爲對象的每個實例創建一個循環嗎?
- 29. 可以像這樣編程一箇中斷嗎?
- 30. FLEX:Actionscript:我可以從ArrayColletion中創建新的對象嗎?
只是一個想法:爲什麼你需要這個嗎?在視覺上,它意味着類型「Trung」中的「NguyenThe」類型。 – Kangkan 2010-11-09 16:52:56
如果「NguyenThe」是一般類「Trung」中的特殊類型,該怎麼辦?對不起所有人,我只是對在課堂上上課感到好奇。 – 2010-11-09 16:55:58
'var x = new {Name =「Trung.NguyenThe」};'? ;) – 2010-11-09 17:10:39