ruby - 有条件地在一行中分配函数的返回值
问题描述
想象一下我有以下两个功能:
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
解决方案
x = [myfunc1, myfunc2].reduce { |f1, f2| f1 || f2 }
不幸的是,由于必须在 上暗示短路,所以短符号不起作用or
:
x = [myfunc1, myfunc2].reduce(:||) # does not work
推荐阅读
- batch-file - 使用映射文件复制和重命名文件
- python - 与`print`与`return`命令一起使用时,Magic func __str__在输出中生成类型错误
- r - 带有分组数据的滚动窗口滑块::slide()
- python - ValueError:没有足够的值来解包(预期 2,得到 1),底图
- apache-spark - Spark结构化流:ClassCastException:.streaming.SerializedOffset不能转换为类.spark.sql.streaming.CouchbaseSourceOffset
- javascript - 将模板文字作为道具传递不会呈现
- python - 解析数据框中的多索引以获得更好的清晰度
- android - 活动可以在 onCreate() 完成之前处理 onBackPressed() 吗?
- python - 如何将 DataFrame 的字典转换为单独的 DataFrame(Python、Pandas)
- azure - 是否可以在 AzureAppService 接收电子邮件:[用户名]@[appserviceUrl 域]?