我如何干掉这个 ruby if-then 语句?

how do I DRY out this ruby if-then statement?

我有以下代码,对于我想要它做的事情来说似乎很冗长:

if @initial_that.present?
  @that = @initial_that
  get_talk_api_response
else
  get_talk_api_response
end

看起来我可以让它干燥,但不确定如何。

我确定这个重构有一个计算机科学名称,但你在两个分支中调用 get_talk_api_response,所以把它放在条件之外:

if @initial_that.present?
  @that = @initial_that
end

get_talk_api_response

然后让它看起来更像 ruby,根据热门评论:

@that = @initial_that if @initial_that.present?
get_talk_api_response

由于您使用的是 present? 方法,我假设您的代码在 Rails 应用程序中,因此您可以简单地使用 presence 方法:

@that = @initial_that.presence || @that
get_talk_api_response

来自guides

2.2 presence

The presence method returns its receiver if present?, and nil otherwise.