2009年7月 5日

[ruby-list:46162] Re: メソッドArgumentのParenthesisについて

高橋征義です。

2009/07/04 14:05 に Shingo Hagiwara<rindou@xxxxx> さんは書きました:
> その僕が違和感を感じたコード(コード補完)とは
>
> REXML::Elementオブジェクトに対する補完でして、
> add_attributeに対しては
> element.add_attribute(key, value)

>
> と補完されます。しかし、add_elementでは
> element.add_element element, attrs
> と補完されました。共にNetbeans6.5.1です。
>
> おそらく補完データを書いた人が違うのでしょうね。
> それで流儀が違うと言うのかもしれません。

確認してみました。どうもREXML自体のソースで記法に
揺れがあるようですね。NetBeansの補完はそれを反映して
いるようです。ううむ。

> ちなみに気持ちが悪いなぁと思ってしまうのは、例えば
> p REXML::Element.new("hoge").add_element REXML::Element.new("foo")
> .parent.add_element(REXML::Element.new("bar")).parent.to_s
>
> とやると当然エラーですが、
>
> p REXML::Element.new("hoge").add_element(REXML::Element.new("foo")
> ).parent.add_element(REXML::Element.new("bar")).parent.to_s
>
> とやると当然通ります。
>
> このように意味が同じでありながら挙動が違うことに違和感を感じてしまうからです。

ええっと、これは要するに、

foo bar arg1.buz

が、

foo(bar(arg1.buz))

と解釈されているわけですよね? でも、Hagiwaraさんは、

foo(bar(arg1).buz)

と解釈してほしかった、と。

とはいえ、これはやはりこうあるべきですよね。そうじゃないと、

p "abc".sub(/b/,"B")

みたいなものも、"aBc"とは表示されなくなりますから。

> なのでどうしても自分は全部括弧を補ってしまいます。

それでも、pメソッドの引数のカッコはわりと省略したりしません?
#そうでもなかったらごめんなさい。

pが普通のメソッドでありながら、カッコを省略できる、というのは、
Rubyの文法のおかげです。このおかげで、pがいまいちだからpp.rbの
ppメソッドを使う、といった時でも、同様に pp *foo* みたいな書き方が
できる訳です。この挙動は、普段はほとんどカッコをつけていても、
ここで省略できるのはうれしいと感じることもあります。

高橋征義 (takahashimm@xxxxx)


投稿者 xml-rpc : 2009年7月 5日 03:55
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/86445
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。