From: "M.Fujii" Date: 2007-06-20T16:47:21+09:00 Subject: [ruby-list:43637] case when 〜 end 構文での and/or/not 演算子について 藤井と申します。 ruby-list の皆さま初めまして case の式を省略する構文を用いる場合に when 節の条件式で and/or/not 演算 子を使いたい場合にどうすべきか分からなくて困っています。 3 つ以上の条件分岐においてelsif を使うと、以下のように条件式のカラム が揃わないのが何となく違和感を感じます。 if a == 0 # 条件式の開始が 4 カラム目 puts 'a' elsif b == 0 # 条件式の開始が 7 カラム目 puts 'b' end そこで、以下のように case での式を省略した形式を使いたいと思っています。 case when a == 0 puts 'a' when b == 0 puts 'b' end しかし、式を省略した case を用いる場合に困ったことがあります。それは、 以下のように when 節に and や or を用いた式が使えないということです。 $ ruby -v ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32] $ cat case.rb a = b = true case when a and b puts 'a' end $ ruby case.rb case.rb:3: syntax error, unexpected kAND, expecting kTHEN or ':' or '\n' or ';' when a and b ^ case.rb:5: syntax error, unexpected kEND, expecting $end 以下のように括弧で囲んだり and ではなく && を用いた場合には問題なく使え ています。 << 括弧で囲んだ場合 >> $ cat case2.rb a = b = true case when (a and b) puts 'a' end $ ruby case2.rb a << && を使った場合 >> $ cat case3.rb a = b = true case when a && b puts 'a' end $ ruby case3.rb a 式を省略した case で and, or, not の必要な条件式を適用する場合、ruby スクリプトとして一般的に用いられているスタイルではどうしているのかを教 えて下さい。 (1) and, or, not の使用を避け、&&, ||, ! を使用する。 (2) "when (a and b)" のように括弧を適用する。 (3) case when 〜 end のような構文を使わず、普通に if 〜 elsif 〜 end を用いる。 (4) 上記以外の何か。 また、"when a and b" のような記述が受理されるように構文を見直していただ ければ幸いです。 以上、宜しくお願いします。 -- 藤井 正行 / Masayuki FUJII