0
快速問題,爲什麼這不起作用?Ruby語法添加方法糖
sum = {}
e = "a"
(sum[e] ||= 0) += 1
我得到了(希望1
):
SyntaxError: unexpected tOP_ASGN, expecting $end
(sum[e] ||= 0) += 1
快速問題,爲什麼這不起作用?Ruby語法添加方法糖
sum = {}
e = "a"
(sum[e] ||= 0) += 1
我得到了(希望1
):
SyntaxError: unexpected tOP_ASGN, expecting $end
(sum[e] ||= 0) += 1
當你做(sum[e] ||= 0)
括號導致計算的表達式。因此,它將評估爲sum[e]
(例如0)的值,您無法對其執行+=
操作。正如您所期望的那樣,它不會返回一個左值/參考sum[e]
。
irb(main):001:0> 0 += 1
SyntaxError: (irb):1: syntax error, unexpected tOP_ASGN, expecting $end
甚至是這樣的:
irb(main):004:0> (sum[e]) += 1
SyntaxError: (irb):4: syntax error, unexpected tOP_ASGN, expecting $end
如果由於某種原因,你要保持它
您可以通過執行上會是什麼結果相同的操作進行驗證一條線,你可以做這樣的事情:
sum[e] ||= 0; sum[e] += 1
正如dbenhur提到的,如果你將要這樣做有很多,您還可以設置在哈希的所有密鑰的缺省值:
sum = Hash.new(0)
集總和是一個散列結果,其中,當你訪問它的每一個鍵被自動設置爲0。
很酷,我看,感謝編輯。我會問你,如果你知道一種方法來保持它的語法 - sugarely方式 – Hartator 2013-04-06 23:57:16
@Hartator當然沒問題,很高興我能幫上忙。隨時在有機會時將其標記爲正確。 – 2013-04-07 01:36:05
人們也可以讓哈希具有未定義鍵的[初始化塊](http://www.ruby-doc.org/core-2.0/Hash.html#method-c-new):'sum = Hash.new {| H,K | k [k] = 0}' – dbenhur 2013-04-07 03:31:48