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

Ruby 如何在一行中更改方法的结果?,ruby,Ruby,我需要稍微更改方法的输出:执行函数,如果是空字符串,则将其转换为“1”。我怎么能把这篇短文写在一行上呢 var = some_really_long_method(foo) var = "1" if var == "" 我在下面试过了,但这确实调用了该方法两次,对吗 var = some_really_long_method(foo) == "" ? "1" : some_really_long_method(foo) 在Ruby中,换行符是可选的,它们总是可以替换为表达式分隔符(;)、关键

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

var = some_really_long_method(foo)
var = "1" if var == ""
我在下面试过了,但这确实调用了该方法两次,对吗

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

在Ruby中,换行符是可选的,它们总是可以替换为表达式分隔符(
)、关键字(例如
then
do
),有时也可以替换为空白

因此,每个程序,无论多么复杂,只要删除换行符,就可以始终在一行中编写:

var = some_really_long_method(foo); var = "1" if var == ""
您可以使用:


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

如果该方法可以返回nil而不是“”您可以这样做:var=some_really_long_method | |“1”我正在寻找类似的东西。但我知道很遗憾,没有一种方法可以对空字符串执行相同的操作?请您确认一下好吗?不,我不知道。总是很好,一个新方法。或者,但没有足够的不同,可以得到一个新的答案
var=some\u really\u long\u method(foo)。如果s.empty,点击{s | s.replace(“1”)
var = "1" if (var = some_really_long_method(foo)) == ""
def some_really_long_method
  p 'called'
  p res = ["", "10"].sample
  res
end

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