ruby - ruby 语法糖的加法

标签 ruby syntax syntax-error addition

快速提问,为什么这不起作用?

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)

将sum设置为一个哈希值,其中每个键在您访问时都自动设置为0。

关于ruby - ruby 语法糖的加法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15857266/

相关文章:

ruby - 在 Ruby 中替换 Vector 的值

c - 为什么 while 写在这里没有 body ?

MySQL INSERT [...] SET 不起作用

php - 得到一个解析错误 : syntax error, 意外 '}' ,期望 ',' 或 ';

ruby - perl 和 ruby​​ 之间河豚加密的区别

javascript - 与 Javascript 相比,执行 AES 加密是 Ruby

ruby-on-rails - rails Rspec `require' : cannot load such file -- rails_helper (LoadError)

c++ - 模板语法解释

syntax-error - TI-84 Plus无法识别本地关键字

assembly - 尝试分配变量时,MIPS程序集解析错误