Ruby语句中`和`的数量是否有限制?

时间:2012-08-25 14:03:39

标签: ruby

下面的代码可以按照我想要的方式工作,用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

我想在ifelse部分添加更多语句,但不能。

2 个答案:

答案 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

您可能希望详细了解and/or in Ruby and how they differ from &&/||

答案 1 :(得分:0)

我对红宝石一无所知但是因为在你的if语句then之后发生了多件事,你是否需要以某种方式对它们进行分组?即Java,你会把它们粘在{}