ruby – `(a || = [])<< 1`与`(i || = 0)= 1`
发布时间:2020-12-17 02:37:07 所属栏目:百科 来源:网络整理
导读:虽然我现在已经写了一段时间的 Ruby,但我总是在寻找改善风格的方法. 我已经习惯了一种特别简短,简洁的实例化附加到数组的方法: ruby-1.9.3-p194 :001 (a ||= []) 1 = [1] 此特定语法仅在与Arrays结合使用时才有效,因为我尝试使用其他类型返回语法错误. ruby
虽然我现在已经写了一段时间的
Ruby,但我总是在寻找改善风格的方法.
我已经习惯了一种特别简短,简洁的实例化附加到数组的方法: ruby-1.9.3-p194 :001 > (a ||= []) << 1 => [1] 此特定语法仅在与Arrays结合使用时才有效,因为我尝试使用其他类型返回语法错误. ruby-1.9.3-p194 :002 > (i ||= 0) += 1 SyntaxError: (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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |