From: fujioka Date: 2013-04-13T00:00:40+09:00 Subject: [ruby-dev:47256] Re: Etc.passwd の挙動について 藤岡です。 IRCで中田さんにEtc::Passwdを使えと言われてしまい、 こっちにビックリじゃない仕様のものがありました。 これを使うことにします。 Etcのモジュールのほうはあまり使わないことにしておきます。 (2013/04/12 23:39), fujioka wrote: > xibbarこと藤岡です。 > > Etc.passwd を使ってみて、面食らったので要望を出しておきます。 > 現状は、 > > irb(main):028:0* Etc.passwd > => # gecos="Calendar", dir="/var/empty", shell="/usr/bin/false", change=0, > uclass="", expire=0> > > irb(main):029:0> Etc.passwd > => # gecos="Certificate Enrollment Service", dir="/var/empty", > shell="/usr/bin/false", change=0, uclass="", expire=0> > > って感じで、/etc/passwd を1行ずつ読み込んで、 > Structで返す仕様になっています。 > ブロックを与えると、 > > irb(main):034:0* Etc.passwd{|pw|p pw} > # gecos="AMaViS Daemon", dir="/var/virusmails", shell="/usr/bin/false", > change=0, uclass="", expire=0> > # gecos="AppleEvents Daemon", dir="/var/empty", shell="/usr/bin/false", > change=0, uclass="", expire=0> > > って感じで、1行ずつ読み込んで何かできる様になっています。 > これが、Ruby的には > Etc.passwd.each{|pw|p pw} > とかってやれたほうが驚きが少ないと思ったのですが > いかがでしょうか。 > 少なくとも Etc.passwd で1行ずつ読みだしたStructが返ってくるよりも > いいかなと思います。 > > Etc.passwd.to_a とか出来たほうがいいのではないかと思います。 > 現状、StructのArrayを作る方法もなくて、 > pw_ary=[] > Etc.passwd{|pw|pw_ary << pw} > とかやらなきゃならないです。 > > どういう仕様にしたらスマートかというあたりまでは > 踏み込めていませんが、とりあえず面食らったので > 不満を書いてみました。 > > よろしくお願いします。 >