«前の日記(2008-06-25) 最新 次の日記(2008-06-27)» 編集

Matzにっき


2008-06-26 [長年日記]

_ 高松から帰る

午後には松江で仕事があるので ソフトウェアシンポジウムには参加せず、JRで帰ることにする。 4時間もかかるのは辛い。

朝、せっかくだからとうどん屋に寄ったら、ひろのぶさんがいた。 うーん、行動パターンがいっしょ。

_ [Ruby] false || not(true) のパースが通らない件 - まめめも

mameさんのところ。

RubyKaigi 2008 の増原先生の発表 (資料) で飛ばされた部分に、「false || not(true) のパースが失敗してはまる」ということが書いてありました。全くその通りだと思います。

なんと。初心者はそんなところにひっかかるのか。 やはり、人の意見は聴くものだ。

で、mameさんのところではnotをメソッド化することによって対応していたが、 予約語のまま文法をいじる方がよさそう。

  • parse.y (primary): make functional-style not operator to act like function. see <http://d.hatena.ne.jp/ku-ma-me/20080624/p1>.

これで大丈夫。1.9で有効。

本日のツッコミ(全5件) [ツッコミを入れる]
_ ささだ (2008-07-04 22:39)

いや,はまったのは竹内先生とか....

_ まつもと (2008-07-04 23:07)

なんと。<br>まあ、いくら竹内先生でも「Ruby初心者」には間違いないかと。

_ maeda (2008-07-05 00:59)

?? よくわかりません。そういえば、notと書いて動かなくて、なんとなく!に変えて動いたことがあるような気もする。(「ああ、Rubyにnotってあった気がするけど、勘違いで!じゃなきゃだめだっけ...」とか思ったような。)<br><br>リファレンスマニュアル見てもよくわからない。なんでカッコが二重にいるんだろ?<br>false || not true<br>で動いて当然に感じる(動かなかったら驚く)なあ...

_ もと (2008-07-05 01:01)

え゛…<br>『竹内先生』と聴けば…<br>#すみません、つい…(-_-;)<br><br>いや、いくらでもある名前ではありますが…<br>やっぱり、話題が、falseとnot trueの話でもありますし…(゜〇゜;)

_ もと (2008-07-05 04:02)

その後もう少し考えてみました。<br>ソースコードのまま、コピペしときます。コメントもソース中です。<br>=====<br>#!/usr/bin/env ruby -Ku<br><br>def case1(c)<br> if c.nil?<br> # does nothing<br> elsif !c # c == false || not true<br> # does nothing<br> else<br> puts "case1: ", c<br> end<br># C言語の流儀なら、これで素通りだよなぁ…[!検証不十分]<br>end<br><br>def case2(c)<br> if c.nil?<br> # does nothing<br># c == false || not true これを拾いたいくらいなら、これの前に<br> #elsif c.class == Boolean とか<br> #elsif c.class != Char とか拾わないといけない…???<br>#だいたい、Boolean、とか、CharとかってClassって在るんだっけ?<br> elsif c.class != String #ってのも、良いのかなぁ…?<br> # does nothing<br> puts "case2: c is no String"<br> elsif !c <br> puts "case2: ", c<br> end<br>end<br><br>c = STDIN.getc()<br><br>case1(c)<br>case2(c)<br><br>#文字列のまま真理値評価をして、<br>#要らない『真』成立、と言うのにハマったのは私だけ?

お名前:
E-mail:
コメント:
[]

«前の日記(2008-06-25) 最新 次の日記(2008-06-27)» 編集

track feed Matzにっき Creative Commons License This work is licensed under a Creative Commons License.