簡體   English   中英

紅寶石中的三元運算符

[英]Ternary operators in ruby

似乎應該有更好的方法來做到這一點:

def some_method(argument = 'foo')
  bar = argument == 'foo' ? 'foo' : "#{argument.to_s}_foo"

  # ... do things with bar ...
end

有任何想法嗎? 我也玩過

bar = ("#{argument}_" if argument != 'foo').to_s + argument

但如果有什么事情看起來更復雜

在您的示例中,您似乎根本不需要為fooargument不同的變量(如果以后都需要它們,那將有所不同,但是從您的示例中來看,看起來好像不是這樣)。

一個簡化將是:

def some_method(bar = 'foo')
  unless bar == 'foo'
    bar = "#{bar}_foo"
  end

  # Do things with bar
end

當然,如果您願意,可以執行unless內聯, unless

bar = "#{bar}_foo" unless bar == 'foo'

旁注:插值時不需​​要調用to_s Ruby會為您做到這一點。

如果默認情況下代碼中的argument未變為"foo" ,則可以執行以下操作:

def some_method *argument
  bar = [*argument, "foo"].join("_")
  ...
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM