我在页面上显示了许多导航链接。 它将在应用程序中修复,但将来可能会发生变化,但不能以交互方式进行,只要新版本更改它即可。所以在使用中的应用程序中修复了。
链接数设置为在控制器中的许多不同操作中使用。
我是否应该使用类级别变量@@number_of_link
来使其保持在类中并允许相同名称的其他用途(不同的控制器和模型说)没有冲突(即作用域),或者我应该使用常数如NumberOfLinks
?
我已经得到了两者的建议,并希望确认我对第一个的偏好。
答案 0 :(得分:4)
除非它不变,否则绝对不是常数!
我建议使用类实例变量,而不是类变量。您可以获得类变量的所有好处,甚至可以获得更好的范围(类的其他成员不会破坏该值,也更容易访问。
class Foo
class << self
def number_of_links
@number_of_links ||= 10 # or some sensible default, you might make this a constant to highlight the number when you're reading the code.
end
def number_of_links=( n )
@number_of_links = n
end
end
end
puts Foo.number_of_links
# => 10
Foo.number_of_links = 20
puts Foo.number_of_links
# => 20
请参阅http://blog.codegram.com/2011/4/understanding-class-instance-variables-in-ruby了解更多信息。
答案 1 :(得分:2)
如果仅使用新版软件更改,则将其设为常量。这更好地反映了该价值的意图。
应用程序逻辑不会更改的值不需要是瞬态变量。我尽可能避免使用类变量(和类实例变量),因为许多开发人员无法理解两者之间的差异,何时使用它们等等。
答案 2 :(得分:2)
就像Iain说..使用类实例变量 ..但你可以使用attr_accessor减少代码
class Foo
class << self; attr_accessor :number_of_links; end
self.number_of_links = 10 #default value..
end
puts Foo.number_of_links
# => 10
Foo.number_of_links = 20
puts Foo.number_of_links
# => 20
答案 3 :(得分:1)
如果您不打算使用应用程序逻辑进行修改,那么您应该使用常量。
如果你希望随着类的状态改变它(如果根据数据库交互的状态推断它),你应该使用类变量。
从性能的角度来看,无关紧要,在这种情况下,按照上面描述的方式使用它,您可以使用变量类型来假设意图,这使得开发人员更容易理解而无需“解码”。
答案 4 :(得分:0)
假设您需要更新链接数量,如果您通过常量ruby执行此操作将发出警告,例如“警告:已初始化常量NumOfLinks”
在这种情况下你应该坚持使用类变量。