From: Hiroyuki Iwatsuki Date: 2006-08-19T14:33:11+09:00 Subject: [ruby-list:42722] Re: in演算子の提案 ------=_Part_16754_7159859.1155965589129 Content-Type: text/plain; charset=ISO-2022-JP; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline 岩月と申します。 ruby-devネタかもと思いつつこちらへ。 in演算子は面白いと思いましたので、 ためしにCVS HEADで実装してみました。 % ruby -ve "ary = [1, 2, 3];s = 1;if s in ary; p(true); end" ruby 1.9.0 (2006-08-19) [i386-freebsd6.1] true 内部で右辺オブジェクトのinclude?メソッドを呼び出しますので、 include?を持っていないオブジェクトを右辺に置くとエラーになります。 エラーメッセージに生々しくinclude?と出ます(改善の余地あり?)。 % ruby -ve "n = 100;s = 1;if s in n; p(true); end" ruby 1.9.0 (2006-08-19) [i386-freebsd6.1] -e:1: undefined method `include?' for 100:Fixnum (NoMethodError) andやorと同じような扱いですので、 メソッドの引数に使うときは括弧を2重にします。 % ruby -ve "p(1 in [1, 2, 3])" ruby 1.9.0 (2006-08-19) [i386-freebsd6.1] -e:1: syntax error, unexpected keyword_in, expecting ')' p(1 in [1, 2, 3]) ^ -e:1: syntax error, unexpected ')', expecting $end % ruby -ve "p((1 in [1, 2, 3]))" ruby 1.9.0 (2006-08-19) [i386-freebsd6.1] true この実装自身はともかく、in演算子は見た目わかりやすくなって 好印象です。Ruby 1.8.xへの導入には躊躇しますが、 Ruby 1.9への導入には賛同します。 # やっぱり ruby-dev ネタかな。 -- IWATSUKI Hiroyuki ------=_Part_16754_7159859.1155965589129 Content-Type: application/octet-stream; name=ruby-parser.y-1.451-in.diff Content-Transfer-Encoding: base64 X-Attachment-Id: f_er1jb6v3 Content-Disposition: attachment; filename="ruby-parser.y-1.451-in.diff" LS0tIHBhcnNlLnkJMTkgIDggMjAwNiAxMjo1ODozMyArMDkwMAkxLjQ1MQorKysgcGFyc2UueQkx OSAgOCAyMDA2IDEzOjQ1OjA1ICswOTAwCQpAQCAtNTg4LDcgKzU4OCw3IEBAIHN0YXRpYyB2b2lk IHJpcHBlcl9jb21waWxlX2Vycm9yKHN0cnVjdCAKICVub25hc3NvYyB0TEJSQUNFX0FSRwogCiAl bm9uYXNzb2MgIG1vZGlmaWVyX2lmIG1vZGlmaWVyX3VubGVzcyBtb2RpZmllcl93aGlsZSBtb2Rp Zmllcl91bnRpbAotJWxlZnQgIGtleXdvcmRfb3Iga2V5d29yZF9hbmQKKyVsZWZ0ICBrZXl3b3Jk X29yIGtleXdvcmRfYW5kIGtleXdvcmRfaW4KICVyaWdodCBrZXl3b3JkX25vdAogJW5vbmFzc29j IGtleXdvcmRfZGVmaW5lZAogJXJpZ2h0ICc9JyB0T1BfQVNHTgpAQCAtMTAyNSw2ICsxMDI1LDE0 IEBAIHN0bXQJCToga2V5d29yZF9hbGlhcyBmaXRlbSB7bGV4X3N0YXRlID0KIAkJOwogCiBleHBy CQk6IGNvbW1hbmRfY2FsbAorICAgICAgICAgICAgICAgIHwgZXhwciBrZXl3b3JkX2luIGV4cHIK KyAgICAgICAgICAgICAgICAgICAgeworCQkgICAgICAvKiUlJSovCisJCSAgICAgICAgJCQgPSBj YWxsX29wKCQzLCByYl9pbnRlcm4oImluY2x1ZGU/IiksIDEsICQxKTsKKwkJICAgICAgLyolCisJ CQkkJCA9IGRpc3BhdGNoMyhiaW5hcnksICQxLCByaXBwZXJfaW50ZXJuKCJpbiIpLCAkMyk7CisJ CSAgICAgICUqLworCQkgICAgfQogCQl8IGV4cHIga2V5d29yZF9hbmQgZXhwcgogCQkgICAgewog CQkgICAgLyolJSUqLwo= ------=_Part_16754_7159859.1155965589129--