【问题标题】:How can I use the ternary operator with multiple values?如何使用具有多个值的三元运算符?
【发布时间】:2025-11-30 14:40:01
【问题描述】:

您好,我想了解为什么我的代码似乎可以以 if/else 形式工作,但似乎不适用于三元运算符。

对于我想要的真实价值,它会减少余额并传达我的信息。

以下是我尝试过的:

# With ternary operator. This doesn't work:

def withdraw(pin_number, amount)
    puts pin_number == pin ? @balance -= amount "Withdrew #{amount}. New 
    balance $#{@balance}." : puts pin_error
end

# With if/else statement. This does work:

def withdraw(pin_number,amount)
    if pin_number == @pin
      @balance -= amount
      puts "Withdrew #{amount}."
    else
      puts pin_error
    end
end

~~

【问题讨论】:

  • if-else 变体对我来说看起来不错。请问您为什么要使用三元组?
  • 这主要是为了我的理解。我对 ruby​​ 很陌生,想了解一下三元以及如何将它与多个值一起使用。知道为什么三元似乎不起作用吗?是不是因为“真”部分有两个值?
  • 确切地说,您必须用; 分隔表达式并将它们括在括号中,即(@balance -= amount ; puts "...")。但这会使您的代码难以阅读,应该避免。哦,在您的三元示例中还有一个额外的 puts
  • @Stefan 感谢您的回复和关于额外puts的说明!

标签: ruby


【解决方案1】:

由于三元运算符就是这样(运算符),因此您不能将其拆分为多个指令。

但是,块可以将多条指令“压缩”成一个表达式。

def my_withdraw(pin_number,amount)
  puts (
    pin_number == @pin ?
    begin
      @balance -= amount
      "Withdrew #{amount}."
    end :
    pin_error
  )
end

当然,这是完全难以辨认的,我绝不会建议您在现实世界中使用这种语法。但为了科学,何乐而不为。

【讨论】:

  • 我同意你的观点,在现实生活中我更喜欢 if/else 变体。但这让我更清楚。谢谢!
【解决方案2】:

;如果将两个表达式放在一行中,则用于告诉 Ruby 这两个是不同的语句/表达式/行。

所以你的代码将是

def withdraw(pin_number, amount)
    puts pin_number == pin ? ( @balance -= amount;  "Withdrew #{amount}.  New 
    balance $#{@balance}." ) : puts pin_error
 end

【讨论】:

    最近更新 更多