我有一个看起来像这样的程序:
$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
,那么它是本地的吗?但它是本地化的,因为它感觉非常全球化。
上面的代码有更好的写法吗?指某东西的用途$offset
乍一看可能有点难看。
更新:我可以把这个偏移量放在一个class
定义,但是如果两个或多个类需要使用这个常量怎么办?在这种情况下我还需要定义一个$offset
?
Ruby 中的变量范围在某种程度上是由 sigils 控制的。变量开头为$
是全局的,变量具有@
是实例变量,@@
表示类变量,以大写字母开头的名称是常量。所有其他变量都是本地变量。当您打开一个类或方法时,这是一个新的作用域,并且先前作用域中可用的局部变量不可用。
我通常更喜欢避免创建全局变量。有两种技术通常可以达到相同的目的,我认为这两种技术更干净:
在模块中创建一个常量。因此,在这种情况下,您可以将所有需要偏移量的类放入模块中Foo
并创建一个常数Offset
,这样所有的类都可以访问Foo::Offset
.
定义一个方法来访问该值。您可以全局定义该方法,但同样,我认为最好将其封装在模块或类中。这样,数据就可以在您需要的地方使用,您甚至可以根据需要更改它,但程序的结构和数据的所有权将更加清晰。这更符合OO设计原则。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)