How do you use global variables or constant values in Ruby?
global-variables, ruby
Solution
One thing you need to realize is in Ruby everything is an object. Given that, if you don't define your methods within `Module` or `Class`, Ruby will put it within the `Object` class. So, your code will be local to the `Object` scope.
A typical approach on Object Oriented Programming is encapsulate all logic within a class:
class Point
attr_accessor :x, :y
# If we don't specify coordinates, we start at 0.
def initialize(x = 0, y = 0)
# Notice that `@` indicates instance variables.
@x = x
@y = y
end
# Here we override the `+' operator.
def +(point)
Point.new(self.x + point.x, self.y + point.y)
end
# Here we draw the point.
def draw(offset = nil)
if offset.nil?
new_point = self
else
new_point = self + offset
end
new_point.draw_absolute
end
def draw_absolute
puts "x: #{self.x}, y: #{self.y}"
end
end
first_point = Point.new(100, 200)
second_point = Point.new(3, 4)
second_point.draw(first_point)
Hope this clarifies a bit.
Problem
I have a program that looks like: ``` $offset = Point.new(100, 200); def draw(point) pointNew = $offset + point; drawAbsolute(point) end draw(Point.new(3, 4)); ``` the use of `$offset` seems a bit weird. In C, if I define something outside of any function, it is a global variable automatically. Why in Ruby does it have to be `$offset` but cannot be `offset` and still be global? If it is `offset`, then it is a local? But local to where, because it feels very much global. Are there better ways to write the code above? The use of `$offset` may seem a bit ugly at first. Update: I can put this offset inside a `class` definition, but what if two or several classes need to use this constant? In this case do I still need to define an `$offset`?