0

以下のコードは私が望むように機能し、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が、できません。

4

2 に答える 2

3

制限はありませんand。演算子を誤用しているだけです。「これとあれ」をするのではなく、「これを行い、それが真実であれば、これも行う」のです。簡単な例を次に示します。

1 and puts 'falsy'
nil and puts 'truthy'
# prints: falsy

偽の return であるため、 「hello」のみが出力されputsます。nilputs '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

Ruby の / と/andor&&||の違いについてもっと読みたいと思うかもしれません。

于 2012-08-25T15:44:53.607 に答える
0

私はルビーについて何も知りませんがthen、あなたのifステートメントの後に複数のことが起こっているので、どういうわけかそれらをグループ化する必要がありますか?つまり、Javaを{}に貼り付けます

于 2012-08-25T14:09:04.957 に答える