首页 > 解决方案 > 如何在一行中更改方法的结果?

问题描述

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

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

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

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

标签: ruby

解决方案


您可以使用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 }

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


推荐阅读