0

我是 Ruby 新手,我想知道如何定义一个范围仅限于函数的常量。

def foo(number)
   # I want this to be a constant defined only inside foo
   ABC = 123 
   return number * 123
end
4

2 回答 2

2

没有办法做到这一点。上面的代码会dynamic constant assignment报错,因为没有什么可以保证foo()只调用一次。无论如何,Ruby 常量并不是真正的常量。您可以重新分配它们,它只会生成警告并愉快地更改值。

Ruby 是一种动态语言,鸭式语言;你通常不应该依赖解析器/解释器来保证你的恒定性。除了使您的声明靠近其使用范围之外,确定常量的范围并没有真正的好处。您可以将其移至更高的范围。另一种可能有意义的选择是将常量包装在类/模块中以命名它们。它与局部常量并不完全相同,但它可能会澄清代码;从你的小例子中很难看出。

于 2013-04-24T00:35:48.897 回答
2

你不能这样做,它真的没有任何意义。您的脚本似乎面向函数式编程,因为您在函数内声明了一个常量(这实际上是main对象的一种方法)。

以更加面向对象的方式思考,您可以在类中定义该常量Object(将由 继承main),使其在该类扩展之后的任何地方都可以访问:

class Object
    ABC = 123
    def foo( number ); return number * ABC; end
end

或者更好的是,如果该特定常量仅在特定类或模块中有意义:

module/class Bar
    ABC = 123
    def foo( number ); return number * ABC; end
end
于 2013-04-24T00:43:45.863 回答