From: Tanaka Akira Date: 2004-12-30T17:21:50+09:00 Subject: [ruby-dev:25369] FileUtils.copy_stream(ARGF, STDOUT) ふと気がついたのですが、FileUtils.copy_stream は ARGF を受け付けないようです。 % ruby -rfileutils -e 'FileUtils.copy_stream(ARGF, STDOUT)' /dev/null /home/akr/ruby/lib/ruby/1.9/fileutils.rb:446:in `fu_copy_stream0': undefined method `sysread' for ARGF:Object (NoMethodError) from /home/akr/ruby/lib/ruby/1.9/fileutils.rb:440:in `copy_stream' from -e:1 ドキュメントには # # Copies stream +src+ to +dest+. # Both of +src+ and +dest+ must be a IO. # とあり、ARGF は IO ではないのでそれはそういうものなのかもしれませんが、 意外に思いました。 duck type な考え方でいえば、ARGF が sysread を持っていないのだからしか たがないという見方もあるのですが、read を持っていれば受け付けてくれて もいいんじゃないだろうかと感じたのですが、どうでしょう? なお、ARGF が sysread を持つべきだという見方も考えられるのですが、 sysread は system call 直結というイメージがあって、ARGF につけるのは ちょっと変なように感じます。 -- [田中 哲][たなか あきら][Tanaka Akira]