9

在 Ruby 中编程时,我经常有如下任务

test = some_function if some_function

通过该分配,我想分配函数的输出,但如果它返回,nil我想保留变量的内容。我知道有条件赋值,但既||=不能也&&=不能在这里使用。我发现描述上述陈述的最短方法是

test = (some_function or test)

有没有更好/更短的方法来做到这一点?

4

2 回答 2

6

我认为没有什么比您展示的最后一个片段更好的了,但请注意or用于流量控制,请||改用:

test = some_function || test

通常最好为新名称分配新值,生成的代码更易于理解和调试,因为变量/符号在整个范围内具有相同的值:

some_different_and_descriptive_name_here = some_function || test
于 2012-11-03T12:03:46.043 回答
1

我只是添加括号

(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?

于 2012-11-08T01:55:14.610 回答