如何從TclOO中的:: oo :: object區分基本類型(如字符串)?TCLOO:如何區分基本類型與對象
1
A
回答
2
您可以精確地確定一個值是手柄的目的是通過使用info object isa object
:
if {[info object isa object $thing]} {
puts "Hey, $thing is an object!"
}
一般來說雖然,TCL的類型系統具有的所有值至少是名義上字符串。更嚴格地說,每個值都可串行化爲一個字符串。有些值也具有其他特性(例如,數字也知道它們的數字性)。 TclOO對象句柄是字符串和命令名稱(因此可以是rename
d)和(當然)對象句柄。
0
愚蠢的答案:
# Since a normal string is unlikly to be "::oo::object", this will return 1
# if the argument is not ::oo::object
proc is_oo_object args {
string equals $arg ::oo::object
}
# gettype - higly accurate
proc gettype arg {
# EIAS
return "string"
}
答案很簡單:你不能。如果有人向你傳遞一個對象的名字,那就是一個字符串。 (見的Tcl/Tk維基EIAS)
你可以嘗試猜測,如果它是一個面向對象:: ::對象,如果你檢查是否存在使用該名稱的命令:
if {[llength [namespace which $arg]]} {
....
}
這仍然不意味着這是:: oo :: object。 你可以試着用expr {[catch {info object class $arg ::oo::object} res] && $res}
來檢查它,但是誰告訴你有人想要通過oo::class
作爲字符串?
相關問題
- 1. 如何區分對象類型與Typescript中的數組類型
- 2. 如何區分對象類型c#
- 3. TclOO:訪問嵌套對象
- 4. 模板類來區分對象類型?
- 5. 如何僅基於基本類型創建派生對象?
- 6. 與基本類型
- 7. 如何在TypeScript中區分兩種不同的對象類型?
- 8. 如何從基本類型的對象映射?
- 9. 如何動態分配對象類型?
- 10. 在Cassandra中存儲基元類型與對象類型
- 11. 使用派生類對象分配基類對象的錯誤類型
- 12. 「類型'對象'是不可分配類型」與新的HttpClient/HttpGetModule
- 13. 基本類型的基本類型
- 14. 普通類的對象與泛型類的對象是否有區別?
- 15. 我們如何區分SDK類對象和自定義類對象?
- 16. 如何在c中按對象本身獲取對象類型#
- 17. 如何將超類對象從基類對象中分離出來?
- 18. 動態與對象類型
- 19. 使用繼承基類對象時傳遞基類對象類型
- 20. 如何停止分配派生類對象的基類指針
- 21. GSON不包含區分字段基本列表對象列表
- 22. 如何將派生類對象與基類對象java進行比較?
- 23. 如何分析與對象
- 24. 如何分配對象類?
- 25. 將基類對象分配給派生類對象
- 26. 基本類型
- 27. 基本類型
- 28. 基於對象類型的篩選
- 29. 如何區分USB設備類型?
- 30. 無法將TMyClass對象分配給其基本接口類型的變量