下面的代码可以按照我想要的方式工作,用l的每个按键打开或关闭灯。但是,当我尝试添加其他我希望切换的东西时,我不能。
look = 0
lighton = 0
while look < 10
system 'stty cbreak'
q = $stdin.sysread 1
case q ### #{q}
when "l" then if lighton==1 then lighton=0 and puts "ight off"
else lighton=1 and puts "ight on" end
end
system 'stty cooked'
look += 1
end #while
如果我添加另一个and
,则不会看到它,但我没有收到任何错误:
look = 0
lighton = 0
while look <10
system 'stty cbreak'
q = $stdin.sysread 1
case q ### #{q}
when "l" then if lighton==1 then lighton=0 and puts "ight off" and puts "light still off"
else lighton=1 and puts "ight on" end
end
system 'stty cooked'
look += 1
end #while
我想在if
和else
部分添加更多语句,但不能。
答案 0 :(得分:3)
没有限制,你只是在滥用and
运营商。它并不意味着做“这个和那个”,它确实“做到这一点,如果真的这么做,也做到这一点”。这是一个简单的例子:
1 and puts 'falsy'
nil and puts 'truthy'
# prints: falsy
由于puts
返回nil
,这是假的,puts 'hello' and puts 'world'
只会打印“你好”。
因此,请勿使用and
创建单行。您可以使用;
代替,但这无助于提高可读性。而只是使用多行!发生了什么事情要清楚得多:
case q
when "l"
if lighton == 1
lighton = 0
puts "light off"
puts "light still off"
else
lighton = 1
puts "light on"
end
end
答案 1 :(得分:0)
我对红宝石一无所知但是因为在你的if语句then
之后发生了多件事,你是否需要以某种方式对它们进行分组?即Java,你会把它们粘在{}