jihg です。4位。フィンランド良すぎ。アメリカは地の利。日本は...

From: Masaaki Sakano [mailto:mas / star.le.ac.uk] 
Subject: [ruby-list:33927] Re: [Summary]arguments for def+       	next if /^\s*\&/ =~ ss+       	ss.sub!(/^\s*\*/,'')ss.gsub!(/(.+?)\s*(?:$|=.*)/){ $1 }

おざなりに作ったのがばればれ。

>!   puts "(#{count})count."

puts はメソッドの意識が強くて、こういう使い方には抵抗あるんで。o.puts と
して、ついでに引数を括弧で囲むと抵抗感がなくなるんだけど、他人が見たら分
かりにくそうだし。print だといつも \n 付け忘れるから...妥協して、o.puts
(括弧なし)を使うことにしてみる。

>○=制約def abc (a)b=ab.xxx!は検出できませんね(多重代入まで考えるともっと複雑!)。

こういうのもだめですね。

  def func(a)
    (a) << "break!"           # 警告
  end

  def func(a ,b ,c)
    (a ? b : c) << "break!"   # 警告
  end
  
  def func(a ,b ,c)
    if a
      b
    else
      c
    end << "break!"                        # 警告
  end

制約ですね。

(a) << "break!" くらいは何とかなるかも。ほかは感度を鋭くしないと検出でき
ない。トップレベルでの破壊的メソッドのことも考えると...。

ところで、

>    b=ab.xxx!

これは破壊的メソッドの問題というより、代入の問題といったほうが良いでしょ
うね。つまり、

	a = "abc"
	b = a
	b << "break!"
	# a = "abc"
	# b = "abcbreak!"

を期待している可能性がある。

Ruby の初心者か、C や VBx 等と使い分けている人にありがちな記述ですね。

検査するとしたら、こういうのを見分ける。

  def func(a ,b ,c)
    x = a                   # 警告
    x ,y ,z = a ,b ,c	    # 警告
    x ,y ,z = [ a ,b ,c ]   # 警告
    x = [ a ]               # 警告
    x ,y ,z = [ a ]         # 警告
    x = { "key" => a }
    x = y[a]
    x = "a"
    x = "abc"
    x = "This is a pen."  #...
  end
    x = a
    x ,y ,z = a ,b ,c

※へんなのが入ってるけど、試しに書いたのがこれにヒットしてたということ
で、デバッグ用。

xUnit  や debug.rb に任せたほうがいいのかな。

分かってるつもりで見逃すのが怖いんだ。頭の中で考えてるとき、馴染みのある
言語で考えるから。これがオブジェクト指向 風 言語だと、気づくのに時間がか
かる。Ruby は 真 オブジェクト指向だと唱えながら考えないとうっかりやって
しまう。