我需要稍微改变一下方法的输出:执行该函数,如果它是一个空字符串,则将其转换为“ 1”。我怎么能只在一行上写这么短呢?
var = some_really_long_method(foo)
var = "1" if var == ""
我在下面尝试过,但是确实两次调用了方法,对吧?
var = some_really_long_method(foo) == "" ? "1" : some_really_long_method(foo)
答案 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中是可选的,它们总是可以用表达式分隔符(;
),关键字(例如then
,do
)或有时只是空白代替。 / p>
因此,每个程序,无论多么复杂,都可以仅通过删除换行符而在一行中编写:
var = some_really_long_method(foo); var = "1" if var == ""
答案 2 :(得分:0)
var = "1" if (var = some_really_long_method(foo)) == ""