miau's blog?

Ruby の warining: useless use of 〜 in void context

今年は OJT 担当というのをやっていて、担当している新人にはとりあえず Ruby を覚えてもらってるわけですが。
なんかハマってるようなので見てみたら、こんなコードを書いてました。

input = gets.chomp.split
input.sort
# なんか処理

まあありがちなミスで、sort した結果をどこにも入れてないから想定どおりに処理できてないという話。

じゃあこういうのを発見するのにどうするべきか、ってことで「-w オプションつけてみ?」って言ったけど、警告が出てくれないみたい。あれ?そういうもんだっけ?




自分でも試してみる。

>ruby -we "[1, 2, 3].sort"

ん。確かに警告出ない・・・。Perl はちゃんと警告出たよなぁ。

>perl -we "sort+(1, 2, 3)"
Useless use of sort in void context at -e line 1.

うん。これこれ。
Ruby ってそもそもこういう警告自体出ないんだっけ?と思ったらそういうわけでもなく。

>ruby -we '1'
-e:1: warning: useless use of a literal in void context

・・・というところで少し悩んだんだけど、考えてみると当り前(?)のことで。
Perl の sort() は組み込み関数だからいいけど、Ruby の Array#sort はただのメソッドだから、副作用があるかどうかをコンパイラが事前に知ることができないっぽいですね。

言語的に「これは副作用のないメソッドだ」とか判断してくれるとベストなんですけどね。hoge! というメソッドが存在している場合は自動的に hoge メソッドは副作用がないものとして警告出してくれるとか。

それにしてもこれ、地味なところでハマりそうなんですが。もし冒頭に書いたようなミスを効率的に発見できる方法があるようでしたら教えて下さい。>読んでる方
posted at 07:23:39 on 2007-08-24 by miau - Category: Ruby No Trackbacks - Permalink

TrackBack

このエントリにトラックバックはありません
現在トラックバックは受け付けていません。

Comments

No comments yet

Add Comments

現在コメントは受け付けていません。
お手数ですが、 こちら のコメント欄にでも記載していただければと思います。