如何用一行代碼創建三個空的哈希值?如何用一行代碼創建三個對象?
我知道a = b = c = Hash.new
將無法正常工作,因爲這將創建三個引用到相同的哈希對象。
a,b,c = Hash.new
將分配給Hash
a
,但b
和c
保持nil
。
我知道我可以做a, b, c = Hash.new, Hash.new, Hash.new
,但看起來不太乾。
如何用一行代碼創建三個空的哈希值?如何用一行代碼創建三個對象?
我知道a = b = c = Hash.new
將無法正常工作,因爲這將創建三個引用到相同的哈希對象。
a,b,c = Hash.new
將分配給Hash
a
,但b
和c
保持nil
。
我知道我可以做a, b, c = Hash.new, Hash.new, Hash.new
,但看起來不太乾。
正如我張貼的評論,我覺得a, b, c = {}, {}, {}
是最好的方式,因爲它是短,易於閱讀。如果你真的想這樣做更復雜的方式,像這樣將工作:
>> a, b, c = Array.new(3) { Hash.new } #=> [{}, {}, {}]
>> a #=> {}
>> b #=> {}
>> C#=> {}
好吧,我一直在尋找一個語言結構,但因爲有沒有,我猜想你的答案最多的,我會接受它。所有其他answeres比較好,太(雖然我自己嘗試過使用'3.times.map {Hash.new}',但我並不太滿意)。謝謝大家:D – omninonsense
我真的不知道我是否會使用,但它是可能的:
a, b, c = 3.times.map { Hash.new }
# or
a, b, c = (1..3).map { Hash.new }
雖然你已經打上一個答案,我會以另一種方式我覺得這是最簡單的拋出:
a,b,c = [{}]*3
不太可讀,但很有創意!我喜歡它! –
看起來像這樣會將'a','b'和'c'設置爲同一個哈希實例。>> >> a,b,c = [{}] * 3#=> [{},{},{}] >> b [1] = 1#=> 1 >> a#=> {1 => 1} >> c#=> {1 = > 1}' –
它將所有三個設置爲相同的散列值。原因是Ruby首先分配'{}',然後複製它三次。它不重複三個'{}'數組,然後分配它們。 –
我真的不知道我是否會使用,但它是可能的:
a, b, c = 3.times.map { Hash.new }
#or
a, b, c = (1..3).map { Hash.new }
然而另一種答案..因爲你可以簡單地使用{}
,而不是Hash.new
的分配可能是這樣的:
a, b, c = 3.times.map{{}}
這三個哈希得來的* *某處。 – delnan
@delnan因此,創建一個類的多個實例沒有捷徑嗎? :( – omninonsense
由於'Hash.new'調用既不使用參數也不使用塊,因此可以將其縮短爲'a,b,c = {},{},{}'。 –