有没有办法避免在'elsif'分支中多次调用函数?

时间:2017-11-12 18:45:09

标签: ruby conditional branch

我有一个返回nil或非nil值的函数,我在以下if - else子句中使用它:

if condition_that_doesnt_involve_my_func
  # do stuff
elsif my_func(cur_line)
  headers_found = my_func(cur_line)
end

我觉得上面的块有点浪费,因为它调用了两次函数,它可以只保存一次结果,然后如果分支求值为非nil则在下面的子句中使用它。

有没有办法重写这个,所以我只调用一次函数?

3 个答案:

答案 0 :(得分:2)

你可以写:

elsif headers_found = my_func(cur_line)

我不建议那样,而Rubocop也不喜欢这样。

答案 1 :(得分:2)

试试这个:

if condition_that_doesnt_involve_my_func
  # do stuff
elsif answer = my_func(cur_line)
  headers_found = answer
end

不确定rubocop是否会在此吠叫。我不习惯。

答案 2 :(得分:0)

如果您担心它将返回值分配给headers_found。它最终会变为假(headers_found.present? #false)或包含标题。

if condition_that_doesnt_involve_my_func
  # do stuff
else 
  headers_found = my_func(cur_line)
end