インデクサ([]演算子を使ってアクセスする)
プログラミングC# p197
オブジェクトに[]の機能を追加する機能です。
Rubyでもできますね。Javaはできないような気がします。
とりあえずサンプルコード。おなじみ(?)Rectangleのxをindex=0で、yをindex=1で読み書きできるようにしてみました。
using System; class Rectangle { private int x; private int y; public int this[int index] { get { switch(index) { case 0: return x; case 1: return y; default: return -1; } } set { switch(index) { case 0: this.x = value; break; case 1: this.y = value; break; } } } public int area() { return this.x * this.y; } static void Main(string[] args) { Rectangle r = new Rectangle(); r[0] = 5; r[1] = 4; Console.WriteLine("r.x = {0}, r.y = {1}, r.area = {2}", r[0], r[ 1], r.area()); } }
結果はこう。
r.x = 5, r.y = 4, r.area = 20
うまく動いている感じ。
念のためRuby。
class Rectangle def area() return @x * @y end def [](index) case index when 0 return @x when 1 return @y else return -1 end end def []=(index, value) case index when 0 @x = value when 1 @y = value end end end r = Rectangle.new r[0] = 5 r[1] = 4 print "r.x = ", r[0], ", r.y = ", r[1], ", r.area = ", r.area()
結果はこう。
r.x = 5, r.y = 4, r.area = 20
かなりの勢いでたのしいRubyの内容を忘れていることが判明。
まあ、リファレンスマニュアルを読んでなんとか書けた。