哪一種更好的做法來存儲鍵值對?ruby中的鍵值對,array與hash
數組:
class A
DEFAULTS = [ONE = 1, TWO = 2]
end
或哈希:
class A
DEFAULTS = {'ONE' => 1, 'TWO' => 2 }
end
哪一種更好的做法來存儲鍵值對?ruby中的鍵值對,array與hash
數組:
class A
DEFAULTS = [ONE = 1, TWO = 2]
end
或哈希:
class A
DEFAULTS = {'ONE' => 1, 'TWO' => 2 }
end
這是一個更好的做法?
TL; DR你可能想要一個散列。
你的第一個例子看起來像鑰匙和價值觀,但它實際上是等同於:
class A
ONE = 1
TWO = 2
DEFAULTS = [ONE, TWO]
end
所以要創建三個常量:
A.constants #=> [:DEFAULTS, :ONE, :TWO]
A::ONE #=> 1
A::TWO #=> 2
A::DEFAULTS #=> [1, 2]
而且你要訪問通過索引的陣列值0
和1
:
A::DEFAULTS[0] #=> 1
A::DEFAULTS[1] #=> 2
第二個只創建一個常數
A.constants #=> [:DEFAULTS]
A::DEFAULTS #=> {"ONE" => 1, "TWO" => 2 }
而且,您可以通過按鍵'ONE'
和'TWO'
訪問值:
A::DEFAULTS['ONE'] #=> 1
A::DEFAULTS['TWO'] #=> 2
第三種選擇是使用命名空間模塊:
class A
module DEFAULTS
ONE = 1
TWO = 2
end
end
它創建嵌套的常數:
A.constants #=> [:DEFAULTS]
A::DEFAULTS #=> A::DEFAULTS
A::DEFAULTS.constants #=> [:ONE, :TWO]
A::DEFAULTS::ONE #=> 1
A::DEFAULTS::TWO #=> 2
它使絕對沒有任何意義問「哪個是更好的做法」,因爲他們做完全不同的事情。
第一代碼段
TWO
和值2
分配給它ONE
常數和值1
分配給它DEFAULTS
和給它賦值[1, 2]
的第二代碼片段
DEFAULTS
常數和值{ 'ONE' => 1, 'TWO' => 2 }
分配給它兩個代碼片段的共同點幾乎一無所有。永遠不可能有一種情況,你可以選擇使用其中一種。
那麼,你不太明白第一個如何工作。
在這種情況下,你創建:
[1, 2]
所以表達DEFAULTS = [ONE = 1, TWO = 2]
沒有多大意義。
,等於
class A
DEFAULTS = [1, 2]
ONE = 1
B = 2
end
所以,你需要決定如何你想訪問這些常量:通過A::ONE
或通過A::DEFAULTS['ONE']
附:我建議你閱讀關於Ruby模塊(如果你喜歡,你可以稱它們爲namespeces)。這是非常重要的
你將如何訪問數組中的值? –
'A :: ONE'和'A :: TWO',我覺得有點尷尬。 – Liroy
你的問題不清楚。這兩個代碼片段*完全不同的東西*。我從字面上無法想象在兩種情況之間進行選擇的情況。另外,第一個代碼是*嚴重*混淆,任何編寫這樣的代碼的人都應該被解僱。 –