3
我想編寫一個函數,將做到以下幾點:檢查的對象是一個編譯時間常數
isConstant(new Obj()) => false isConstant(const Obj()) => true
這可能嗎?
我想編寫一個函數,將做到以下幾點:檢查的對象是一個編譯時間常數
isConstant(new Obj()) => false isConstant(const Obj()) => true
這可能嗎?
號在運行時有一個編譯時間常數的值,你就創建了一個新的對象之間沒有什麼區別。差異只在編譯時才存在。
您唯一能做的就是檢查對象是否與已知的編譯時間常量相同。 在這種情況下, (x)=>相同(const Object(),x); 將檢測到「const Object()」對象與在運行時創建的任何「new Object()」不同。只有在編寫函數時知道所有編譯時間常量纔有效,所以它可能沒有用處。即使使用鏡像來查看所有頂級/靜態「const」聲明也不會找到所有常量(並且可能會很浪費)。
你試圖解決什麼問題,你需要這個功能?
在我的情況下,用戶只能使用編譯時常量,因爲我依賴的事實是具有相同參數的對象是相同的。所以我想警告用戶,如果傳入的對象不是編譯時常量。 – 2014-09-19 17:18:17
如果它們是你自己的類的實例,你可以讓你的構造函數只返回規範化的實例。這意味着有一組已經創建的對象,當你嘗試創建一個新對象時,工廠構造函數會查看該對象是否已經存在,如果是,則返回該對象,否則將調用私有構造函數來創建新對象,並在返回之前將其插入到集合中。要小心,因爲這意味着所有的實例永遠存活,永遠不會被垃圾收集。 – lrn 2014-09-19 19:31:46