ruby – `(a || = [])<< 1`与`(i || = 0)= 1`

ruby – `(a || = [])<< 1`与`(i || = 0)= 1`,第1张

概述虽然我现在已经写了一段时间的 Ruby,但我总是在寻找改善风格的方法. 我已经习惯了一种特别简短,简洁的实例化附加到数组的方法: ruby-1.9.3-p194 :001 > (a ||= []) << 1 => [1] 此特定语法仅在与Arrays结合使用时才有效,因为我尝试使用其他类型返回语法错误. ruby-1.9.3-p194 :002 > (i ||= 0) += 1SyntaxEr 虽然我现在已经写了一段时间的 Ruby,但我总是在寻找改善风格的方法.

我已经习惯了一种特别简短,简洁的实例化附加到数组的方法:

ruby-1.9.3-p194 :001 > (a ||= []) << 1 => [1]

此特定语法仅在与Arrays结合使用时才有效,因为我尝试使用其他类型返回语法错误.

ruby-1.9.3-p194 :002 > (i ||= 0) += 1SyntaxError: (irb):2: Syntax error,unexpected top_ASGN,expecting $end(i ||= 0) += 1            ^from /usr/local/rvm/rubIEs/ruby-1.9.3-p194/bin/irb:16:in `<main>'

并且,还有字符串,虽然我非常期望这在先前的实验中不起作用.

ruby-1.9.3-p194 :003 > (s ||= '') += 'TEST'SyntaxError: (irb):3: Syntax error,expecting $end(s ||= '') += 'TEST'             ^from /usr/local/rvm/rubIEs/ruby-1.9.3-p194/bin/irb:16:in `<main>'

在使用此语法形式时,将Array与其他类型区分开来的是什么?

解决方法 在Ruby中,与大多数其他语言一样,缩写赋值只是扩展形式的语法糖,即

a += b

是语法糖

a = a + b

所以,

(i ||= 0) += 1

是语法糖

(i ||= 0) = (i ||= 0) + 1

这完全是非法的.

这与数组完全无关,你可以在这里看到:

(s ||= '') << 'TEST' # works(a ||= []) += [1]    # doesn't work
总结

以上是内存溢出为你收集整理的ruby – `(a || = [])<< 1`与`(i || = 0)= 1`全部内容,希望文章能够帮你解决ruby – `(a || = [])<< 1`与`(i || = 0)= 1`所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1280957.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存