ruby 空值表达式
ruby void value expression
为什么我会收到空值表达式错误?
代码
[return 1]
来自 rib 的错误:
SyntaxError ((irb):3: void value expression)
同样的情况:
def a
[
return 1 if true
2
]
end
为了构造数组,Ruby 必须首先计算数组的内容。但是,两个数组的内容都是一个 return
表达式,它结束了方法的计算。换句话说,数组永远不会被构造出来,它是完全没有用的。
Ruby 在语法上检测到这种情况,并使其成为错误而不是执行无用的代码。
在Ruby中,万物皆表达式,即万物皆有值。然而,对于 return
,这让我们有点棘手:return
表达式的值应该是多少?实际上,它没有任何意义,因为一旦 return
被评估,当前上下文就会退出。
因此,return
的值被假定为 void 值 ,并且每当您使用 void 值 在表达式上下文中,即您希望进一步使用该值的地方,这是一个错误。
您正在尝试 return 解析器无法确定的值。这是因为 return 在数组定义中。
更好的可能是...
return [1]
或
def a
[(my_boolean_method ? 1 : 2)]
end
为什么我会收到空值表达式错误?
代码
[return 1]
来自 rib 的错误:
SyntaxError ((irb):3: void value expression)
同样的情况:
def a
[
return 1 if true
2
]
end
为了构造数组,Ruby 必须首先计算数组的内容。但是,两个数组的内容都是一个 return
表达式,它结束了方法的计算。换句话说,数组永远不会被构造出来,它是完全没有用的。
Ruby 在语法上检测到这种情况,并使其成为错误而不是执行无用的代码。
在Ruby中,万物皆表达式,即万物皆有值。然而,对于 return
,这让我们有点棘手:return
表达式的值应该是多少?实际上,它没有任何意义,因为一旦 return
被评估,当前上下文就会退出。
因此,return
的值被假定为 void 值 ,并且每当您使用 void 值 在表达式上下文中,即您希望进一步使用该值的地方,这是一个错误。
您正在尝试 return 解析器无法确定的值。这是因为 return 在数组定义中。
更好的可能是...
return [1]
或
def a
[(my_boolean_method ? 1 : 2)]
end