高橋征義です。
2009/07/04 14:05 に Shingo Hagiwara<
rindou@...> さんは書きました:
> その僕が違和感を感じたコード(コード補完)とは
>
> 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@...)