在 Ruby 中编程时,我经常有如下任务
test = some_function if some_function
通过该分配,我想分配函数的输出,但如果它返回,nil
我想保留变量的内容。我知道有条件赋值,但既||=
不能也&&=
不能在这里使用。我发现描述上述陈述的最短方法是
test = (some_function or test)
有没有更好/更短的方法来做到这一点?
在 Ruby 中编程时,我经常有如下任务
test = some_function if some_function
通过该分配,我想分配函数的输出,但如果它返回,nil
我想保留变量的内容。我知道有条件赋值,但既||=
不能也&&=
不能在这里使用。我发现描述上述陈述的最短方法是
test = (some_function or test)
有没有更好/更短的方法来做到这一点?
我认为没有什么比您展示的最后一个片段更好的了,但请注意or
用于流量控制,请||
改用:
test = some_function || test
通常最好为新名称分配新值,生成的代码更易于理解和调试,因为变量/符号在整个范围内具有相同的值:
some_different_and_descriptive_name_here = some_function || test
我只是添加括号
(a = b) unless b.nil?
(a = b) if b
劣等,因为如果 b 是假的,那么 a 仍然像以前一样
请记住,这会计算 b 两次,因此如果 b 是具有副作用的函数(例如更改其范围之外的变量或打印),它将执行两次;为避免这种情况,您必须使用
temp = b; (a = temp) unless temp.nil?
(当然可以拆分成)
temp = b
(a = temp) unless temp.nil?