Ruby:仅当函数不返回nil时才分配函数的输出

Ruby:仅当函数不返回nil时才分配函数的输出,ruby,variable-assignment,Ruby,Variable Assignment,在用Ruby编程时,我经常会有如下任务 test = some_function if some_function 通过这种赋值,我想赋值函数的输出,但如果它返回nil,我想保留变量的内容。我知道有条件赋值,但这里既不能使用|也不能使用&&。我发现描述上述陈述的最短方式是 test = (some_function or test) 有没有更好/更短的方法可以做到这一点?我认为没有什么比上一个片段更好的了,但请注意,或用于流控制,请改用|: test = some_function || t

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

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

test = (some_function or test)

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

我认为没有什么比上一个片段更好的了,但请注意,
用于流控制,请改用
|

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

some_different_and_descriptive_name_here = some_function || test

我只想加上括号

(a=b)除非b.nil?

(a=b)如果b

因为如果b为假,那么a仍然和以前一样

请记住,这会对b求值两次,因此如果b是一个有副作用的函数(例如在其作用域之外更改变量或打印),它会对b求值两次;要避免这种情况,您必须使用

temp=b;(a=温度),除非温度为零?

(当然,可以分为以下几个部分)

temp=b

(a=temp),除非温度为零?


这一点很重要,因为直到最近我才使用第一个版本,它会对函数求值两次。因此,第二个版本更好。因为我必须在整个代码中替换第一个版本,所以我只想确保用处理这个问题的最佳方法替换它,或者说是最佳实践。对我来说,这个问题值得一提,因为我得到的答案告诉了我关于这个简单表达式的三件我不知道的事情。首先,使用
|
而不是
。第二,考虑使用<代码>存在>代码>。第三,考虑功能性方法。这比我期望的要多。再加上几年的经验,我可以证实我的答案是错误的。