1

フラクタルを扱っています。長方形から始めて、その形状が所定の減衰率で減少します。特定のシナリオの最初の 10 回の反復を実行するように設定しました。各シナリオは次のようになります。

y_1 = dec_y(y_1)
y_2 = dec_y(y_2)
a_y = [y_1, y_2]
rect_1 = TkcRectangle.new(canvas, [0,0], a_y)

dec_y次のように定義されます。

def dec_y(y)
    to_ret = y / $rate
    return to_ret
end

最初のスニペットを関数/メソッド (Ruby の用語が何であるかは正確にはわかりません...) に変換したいので、各反復がメソッドを参照する 1 行だけになり、問題がより拡張しやすくなります。しかし、それぞれTkcRectangleに異なる名前が必要です。私が設定したい方法では、それぞれTkcRectangleが同じ名前になります。しかし、オブジェクトの名前を引数として渡された文字列に設定できれば、問題はないはずです。

特定の文字列でオブジェクトの名前を定義するにはどうすればよいですか?

4

2 に答える 2

2

編集:コードはテストされていませんが、アイデアが得られます。

各要素に名前を付ける代わりに、配列を使用してインデックスを使用できます

rectangles_array = Array.new
for each loop
  rectangles_array << create_rectangle_object(y_1, y_2, canvas)
end for each loop

def dec_y(y)
  to_ret = y / $rate
  return to_ret
end

def create_rectangle_object(y_1, y_2, canvas)
  return TkcRectangle.new(canvas, [0,0], [dec_y(y_1), dec_y(y_2)])
end

本当に名前を付けたい場合は、構造体について読んでください。

MyRectangleStruct = Struct.new(:obj_name, :x1, :y1, :x2, :y2)
puts MyRectangleStruct.new(:obj_name => 'First_rec', .....)
于 2012-09-17T17:48:15.027 に答える
0
define_method(method_name, &block)

method_name任意の文字列であり、&blockruby コードのブロックです。通常、次のようになります。

define_method(method_name) do
  your code goes here
end
于 2012-09-17T18:04:38.260 に答える