【问题标题】:ruby void value expressionruby void 值表达式
【发布时间】:2019-12-09 13:20:00
【问题描述】:

为什么会出现空值表达式错误?

代码

[return 1]

还有来自肋骨的错误:

SyntaxError ((irb):3: void value expression)

同样的情况:

def a
[
  return 1 if true
  2
]
end

【问题讨论】:

  • 因为return 没有值,根本没有。但是你需要 something 放入一个数组中。
  • 只使用数组中的值即可;不要试图从 within 返回一个数组值。
  • 但是为什么ruby解释器不允许我在数组中使用return,就像在另一个例子中一样:def a(x) x; enda(return 1)——也是空值表达式,我不明白
  • 因为它毫无意义。
  • 因为没有意义

标签: ruby-on-rails ruby irb


【解决方案1】:

为了构造数组,Ruby 必须首先计算数组的内容。但是,两个数组的内容都是一个 return 表达式,它结束了方法的评估。也就是说,数组永远不会被构造,完全没用。

Ruby 在语法上检测到这种情况,并使其成为错误,而不是执行无用的代码。

在 Ruby 中,一切都是表达式,这意味着一切都有一个值。然而,对于return,这让我们陷入了困境:return 表达式的值应该是什么?实际上,它没有任何意义,因为在评估 return 后,当前上下文就退出了。

因此,return 的值被假定为 void 值,并且每当您在表达式上下文中使用 void 值 时,即您期望的位置要进一步使用的值,这是一个错误。

【讨论】:

    【解决方案2】:

    您正在尝试返回解析器无法确定的值。这是因为返回是在数组定义的中间。

    可能会更好......

    return [1]
    

    或者

    def a
      [(my_boolean_method ? 1 : 2)]
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-05
      • 2012-02-21
      • 2011-08-06
      • 2017-01-09
      • 2011-07-21
      相关资源
      最近更新 更多