[ruby-dev:47255] Etc.passwd の挙動について

From: fujioka <fuj@...>
Date: 2013-04-12 14:39:17 UTC
List: ruby-dev #47255
xibbarこと藤岡です。

Etc.passwd を使ってみて、面食らったので要望を出しておきます。
現状は、

irb(main):028:0* Etc.passwd
=> #<struct Struct::Passwd name="_calendar", passwd="*", uid=93, gid=93,
gecos="Calendar", dir="/var/empty", shell="/usr/bin/false", change=0,
uclass="", expire=0>

irb(main):029:0> Etc.passwd
=> #<struct Struct::Passwd name="_ces", passwd="*", uid=32, gid=32,
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}
#<struct Struct::Passwd name="_amavisd", passwd="*", uid=83, gid=83,
gecos="AMaViS Daemon", dir="/var/virusmails", shell="/usr/bin/false",
change=0, uclass="", expire=0>
#<struct Struct::Passwd name="_appleevents", passwd="*", uid=55, gid=55,
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}
とかやらなきゃならないです。

どういう仕様にしたらスマートかというあたりまでは
踏み込めていませんが、とりあえず面食らったので
不満を書いてみました。

よろしくお願いします。

In This Thread

Prev Next