Как я могу использовать троичный оператор с несколькими значениями? - PullRequest
0 голосов
/ 04 апреля 2019

Привет. Я пытаюсь понять, почему мой код работает в форме 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 голосов
/ 05 апреля 2019

; используется, чтобы сообщить Ruby, что эти два выражения - это разные операторы / выражения / строки, если поместить два выражения в одну строку.

Так твой код будет

def withdraw(pin_number, amount)
    puts pin_number == pin ? ( @balance -= amount;  "Withdrew #{amount}.  New 
    balance $#{@balance}." ) : puts pin_error
 end
0 голосов
/ 04 апреля 2019

Поскольку именно троичный оператор (оператор ) не может быть разбит на несколько инструкций.

Тем не менее, блоки позволяют «раздавить» несколько инструкций в одно выражение.

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

Конечно, это абсолютно неразборчиво, и я бы никогда не порекомендовал вам использовать такой синтаксис в реальном мире. Но ради науки, почему бы и нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...