如何将三元运算符与多个值一起使用?

时间:2019-04-04 12:33:07

标签: ruby

嗨,我试图理解为什么我的代码似乎可以以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

~~

2 个答案:

答案 0 :(得分:0)

由于三元运算符恰好是该运算符(运算符),因此您不能将其分为多个指令。

但是,使用块可以将多个指令“压缩”为单个表达式。

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

当然,这是完全难以理解的,我绝不建议您在现实世界中使用这种语法。但是为了科学起见,为什么不呢?

答案 1 :(得分:0)

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

因此您的代码将是

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