如何在一行中更改方法的结果?

时间:2019-05-06 13:13:38

标签: ruby

我需要稍微改变一下方法的输出:执行该函数,如果它是一个空字符串,则将其转换为“ 1”。我怎么能只在一行上写这么短呢?

var = some_really_long_method(foo)
var = "1" if var == ""

我在下面尝试过,但是确实两次调用了方法,对吧?

var = some_really_long_method(foo) == "" ? "1" : some_really_long_method(foo)

3 个答案:

答案 0 :(得分:2)

您可以使用Object#then

def some_really_long_method
  p 'called'
  p res = ["", "10"].sample
  res
end

var = some_really_long_method.then { |m| m == "" ? '1' : m }

您可以检查一下该方法是否被调用过一次。

答案 1 :(得分:1)

换行符在Ruby中是可选的,它们总是可以用表达式分隔符(;),关键字(例如thendo)或有时只是空白代替。 / p>

因此,每个程序,无论多么复杂,都可以仅通过删除换行符而在一行中编写:

var = some_really_long_method(foo); var = "1" if var == ""

答案 2 :(得分:0)

var = "1" if (var = some_really_long_method(foo)) == ""