Ruby:作为变量的条件不起作用

nak*_*bag 2 ruby loops conditional-statements

刚开始在 Ruby 中学习循环和流控制,并坚持了这个练习。我一直在测试和寻找答案,但没有找到任何答案,所以我在这里发帖。

如果我有这样的代码设置:

ask_play = ''
loop do
    print "Play?: "
    ask_play = gets.chomp
    break if (ask_play == 'n') || (ask_play == 'N')
end
Run Code Online (Sandbox Code Playgroud)

然后我在输入 n 或 N 后退出循环。

但是,如果我的代码设置如下:

ask_play = ''
play_stop = (ask_play == 'n') || (ask_play == 'N')
loop do
    print "Play?: "
    ask_play = gets.chomp
    break if play_stop
end
Run Code Online (Sandbox Code Playgroud)

该条件似乎不起作用。即使在输入 n 或 N 之后,我仍然继续循环,我只是不明白为什么。

Yak*_*kov 5

play_stop = (ask_play == 'n') || (ask_play == 'N')在循环开始之前被评估。它将play_stop变量设置为,false因为ask_play您分配给空字符串的变量既不是 也不nN。看起来你想封装条件的逻辑。您可以创建一个方法并将值传递给它。

def play_stop(input)
  input == 'n' || input == 'N'
end

loop do
    print "Play?: "
    ask_play = gets.chomp
    break if play_stop(ask_play)
end
Run Code Online (Sandbox Code Playgroud)