首页 > 解决方案 > 有条件地在一行中分配函数的返回值

问题描述

想象一下我有以下两个功能:

def myfunc
  puts "hello from myfunc"
  return "returned myfunc"
end

def myfunc2
  puts "hello from myfunc2"
  return "returned myfunc2"
end

我想有条件地将这些函数的返回值分配给一个变量,同时确保两个函数的调用方式如下:

x = nil

temp = myfunc
x = temp unless x

temp = myfunc2
x = temp unless x

如何将每两行赋值语句段减少到一行?

请注意,以下内容将不起作用,因为不会调用第二个函数:

x = nil
x ||= myfunc
x ||= myfunc2

标签: ruby

解决方案


x = [myfunc1, myfunc2].reduce { |f1, f2| f1 || f2 }

不幸的是,由于必须在 上暗示短路,所以短符号不起作用or

x = [myfunc1, myfunc2].reduce(:||) # does not work

推荐阅读