rubykansaiくんのつぶやき(Structの巻)

これは、関西に住むRubyistのコミュニティであるRuby関西の愛すべきキャラクター rubykansaiくんのつぶやきを集めたトゥギャッターなのである!
0
RubyKansai @rubykansai

Ruby には Struct っていう便利なクラスがあんねんで。 #rubykansai

2011-10-05 18:58:29
RubyKansai @rubykansai

Struct は簡単にクラスを作ってくれるクラスなんや。 #rubykansai

2011-10-05 18:59:13
RubyKansai @rubykansai

Passwd = Struct.new(:name, :passwd, :uid, :gid, :gecos, :home, :shell) # これで Passwd いうクラスができたんや。 #rubykansai

2011-10-05 19:00:40
RubyKansai @rubykansai

ふつうにインスタンスを作れるで。passwd = Passwd.new("kansai", "*", 1001, 1, "RubyKansai", "/home/kansai", "/usr/bin/irb") #rubykansai

2011-10-05 19:02:31
RubyKansai @rubykansai

Struct.new に渡したシンボルが、そのままアクセサになってるんや。passwd.name # => "kansai" #rubykansai

2011-10-05 19:04:44
RubyKansai @rubykansai

書き込みもできるで。passwd.gecos += ",S109" # => "RubyKansai,S109" #rubykansai

2011-10-05 19:06:34
RubyKansai @rubykansai

Array みたいにデータを取り出すこともできるで。passwd[2] # => 1001 #rubykansai

2011-10-05 19:09:24
RubyKansai @rubykansai

Hash みたいにアクセスすることもできるんや。passwd[:shell] # => "/usr/bin/irb" #rubykansai

2011-10-05 19:11:19
RubyKansai @rubykansai

クラスやから、ふつうにメソッド定義もできるで。class Passwd; def to_s; to_a.join(":") end end #rubykansai

2011-10-05 19:13:50
RubyKansai @rubykansai

passwd.to_s # => "kansai:*:1001:1:RubyKansai,S109:/home/kansai:/usr/bin/irb" # こうやって既存のクラスを後から変更できるんも Ruby のおもろいとこやな。 #rubykansai

2011-10-05 19:14:26
RubyKansai @rubykansai

ちなみに String とか Fixnum とか、Ruby の組み込みクラスも自由に変更できるで。これがオープンクラスっちゅう機能なんや。 #rubykansai

2011-10-05 19:17:10
Kawabata Mitsuyoshi @agilekawabata

RT @rubykansai: ちなみに String とか Fixnum とか、Ruby の組み込みクラスも自由に変更できるで。これがオープンクラスっちゅう機能なんや。 #rubykansai

2011-10-05 19:27:41
ハシビロコウ @yalab

@rubykansai 定数に代入してますけど変数に代入したらどうなるんですか?それも無名クラスみたいな扱いになるんですか?

2011-10-05 19:30:30
RubyKansai @rubykansai

変数に代入してもクラスとして使えるで。確かに名無しクラスになってまうなぁ。 RT @yalab: @rubykansai 定数に代入してますけど変数に代入したらどうなるんですか?それも無名クラスみたいな扱いになるんですか?

2011-10-05 19:35:55