fr00ty_l00ps
fr00ty_l00ps

Reputation: 730

Using Strings as Variable/Object Names in Ruby

I am dealing with fractals. You start with a rectangle, and that shape is decreased by a given decay rate. I have it set up to do the first 10 iterations of the given scenario, and each scenario looks like this:

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)

where dec_y is defined as the following:

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

I want to turn the first snippet into a function/method (not exactly sure what the Ruby term is...), so that each iteration will just be a single line referencing a method, which makes the problem more extensible. But, I need each TkcRectangle to have a different name. The way I want to set it up, each TkcRectangle will have the same name. But, if I can set the name of the object to a string passed as an argument, then I should not have a problem.

How do I define the name of an object with a given string?

Upvotes: 1

Views: 136

Answers (2)

Sully
Sully

Reputation: 14943

Edit : Code has not been tested, but will give you the idea.

Instead of naming each element, you can use an array and use the index instead

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

If you really want to name it read about structs.. Something like

MyRectangleStruct = Struct.new(:obj_name, :x1, :y1, :x2, :y2)
puts MyRectangleStruct.new(:obj_name => 'First_rec', .....)

Upvotes: 2

Atastor
Atastor

Reputation: 741

define_method(method_name, &block)

with method_name being any string and &block being a block of ruby code; usually it looks something like this:

define_method(method_name) do
  your code goes here
end

Upvotes: 0

Related Questions