• 締切済み

Ruby1.9で、グローバル参照可能な(クラス間で参照可能)構造体の2

Ruby1.9で、グローバル参照可能な(クラス間で参照可能)構造体の2次元配列の定義方法が分かりません。 色々と文献を読んでいますが、 ・構造体や配列をグローバル参照可能にする定義 ・2次元配列の定義の方法 について、見つけきれておりません。 どうか、ご教示の程お願いいたします。 投稿日時 - 2010-08-04 21:49:17

みんなの回答

  • sholmes
  • ベストアンサー率81% (89/109)
回答No.3

>・構造体や配列をグローバル参照可能にする定義 トップレベルでの定数か、グローバル変数の利用で可能となります。 # 定数 CONST = foo # グローバル変数 $global = bar >・2次元配列の定義の方法 配列の配列や、ライブラリのNArrayあたりが有名です。 ただし、Rubyで多次元配列が必須なシーンはかなり少ないため、殆どのケースで名前アクセスへ持って行けると思います。

回答No.2

>>グローバル参照可能な(クラス間で参照可能)構造体の2次元配列の定義方法 クラス変数(クラス内で@@変数名で定義)を使われてはいかがでしょうか? クラス間でデータの共有ができます。 >>構造体の2次元配列の定義方法。 Student = Struct.new(:name) Array.new(10){Array.new(10){Student.new("")}} #サブクラス化の例 Student = Struct.new(:name) class A @@students = Array.new(10){Array.new(10){Student.new("")}} #クラス変数 def []=(room,id,name);@@students[room][id].name = name;end def [](room=0,id=0);@@students[room][id].name;end end class B < A;end class C < A;end a=A.new b=B.new c=C.new a[0,0]="studentA" if a[0,0] =="" #生徒の追加 a[1,0]="studentB" if a[1,0] =="" #生徒の追加 a[1,1]="studentC" if a[1,1] =="" #生徒の追加 p a[0,0] p b[1,0] p c[1,1] #モジュールを使った例 module Students @@students = Array.new(10){Array.new(10){Student.new("")}} def []=(room,id,name);@@students[room][id].name = name;end def [](room=0,id=0);@@students[room][id].name;end end class A ;include Students;end class B ;include Students;end class C ;include Students;end a=A.new b=B.new c=C.new a[0,0]="studentA" if a[0,0] =="" #生徒の追加 a[1,0]="studentB" if a[1,0] =="" #生徒の追加 a[1,1]="studentC" if a[1,1] =="" #生徒の追加 p a[0,0] p b[1,0] p c[1,1]

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

>・構造体や配列をグローバル参照可能にする定義 どういう意味ですか?変数のグローバル化なら、先頭が$の変数名にすればいいです。 >・2次元配列の定義の方法 2次元配列そのものは無理なので、「配列の配列」を使うことで代用します。 例えば10x10のものであれば、 $x = Array.new(10){ Array.new(10) } $x[1][2] = "ABC" とか。 似たもので、 Array.new(10,Array.new(10)) は駄目です。

関連するQ&A