如何在Ruby中使用全局变量或常量值?

我有一个程序,看起来像:

$offset = Point.new(100, 200);

def draw(point)
  pointNew = $offset + point;
  drawAbsolute(point)
end

draw(Point.new(3, 4));

使用$ offset似乎有点怪异。

在C中,如果我定义任何函数之外的东西,它是一个全局变量自动。为什么在Ruby中它必须是$ offset,但不能被抵消,仍然是全局的?如果是偏移,那么它是一个局部?但是局部在哪里,因为它感觉非常全球化。

有没有更好的方法来编写上面的代码?使用$ offset可能看起来有点丑。

更新:我可以把这个偏移内部类定义,但如果两个或几个类需要使用这个常量呢?在这种情况下,我还需要定义一个$ offset?

你需要意识到的一件事是在Ruby中一切都是一个对象。鉴于,如果你没有在Module或Class中定义你的方法,Ruby会把它放在Object类中。因此,您的代码将位于对象作用域的本地。

面向对象编程的典型方法是封装类中的所有逻辑:

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)

希望这澄清一点。

http://stackoverflow.com/questions/1042384/how-do-you-use-global-variables-or-constant-values-in-ruby

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:如何在Ruby中使用全局变量或常量值?