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

时间:2012-11-03 11:28:56

标签: ruby variable-assignment

在Ruby中编程时,我经常会有以下

这样的作业
test = some_function if some_function

使用该分配我想分配函数的输出,但如果它返回nil我想保留变量的内容。我知道有条件分配,但此处不能使用||=&&=。我发现描述上述陈述的最短路径是

test = (some_function or test)

有更好/更短的方法吗?

2 个答案:

答案 0 :(得分:6)

我认为没有什么比你展示的最后一个片段更好但注意or用于流量控制,而是使用||

test = some_function || test

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

some_different_and_descriptive_name_here = some_function || test

答案 1 :(得分:0)

我只是添加括号

  
    

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