rubykansaiくんのつぶやき(Structの巻)
Passwd = Struct.new(:name, :passwd, :uid, :gid, :gecos, :home, :shell) # これで Passwd いうクラスができたんや。 #rubykansai
2011-10-05 19:00:40ふつうにインスタンスを作れるで。passwd = Passwd.new("kansai", "*", 1001, 1, "RubyKansai", "/home/kansai", "/usr/bin/irb") #rubykansai
2011-10-05 19:02:31Struct.new に渡したシンボルが、そのままアクセサになってるんや。passwd.name # => "kansai" #rubykansai
2011-10-05 19:04:44書き込みもできるで。passwd.gecos += ",S109" # => "RubyKansai,S109" #rubykansai
2011-10-05 19:06:34Array みたいにデータを取り出すこともできるで。passwd[2] # => 1001 #rubykansai
2011-10-05 19:09:24Hash みたいにアクセスすることもできるんや。passwd[:shell] # => "/usr/bin/irb" #rubykansai
2011-10-05 19:11:19クラスやから、ふつうにメソッド定義もできるで。class Passwd; def to_s; to_a.join(":") end end #rubykansai
2011-10-05 19:13:50passwd.to_s # => "kansai:*:1001:1:RubyKansai,S109:/home/kansai:/usr/bin/irb" # こうやって既存のクラスを後から変更できるんも Ruby のおもろいとこやな。 #rubykansai
2011-10-05 19:14:26ちなみに String とか Fixnum とか、Ruby の組み込みクラスも自由に変更できるで。これがオープンクラスっちゅう機能なんや。 #rubykansai
2011-10-05 19:17:10RT @rubykansai: ちなみに String とか Fixnum とか、Ruby の組み込みクラスも自由に変更できるで。これがオープンクラスっちゅう機能なんや。 #rubykansai
2011-10-05 19:27:41変数に代入してもクラスとして使えるで。確かに名無しクラスになってまうなぁ。 RT @yalab: @rubykansai 定数に代入してますけど変数に代入したらどうなるんですか?それも無名クラスみたいな扱いになるんですか?
2011-10-05 19:35:55