我在业余时间学习 Ruby,我有一个关于常量的语言结构的问题。 Ruby 是否具有 C++ const 关键字的等价物来防止变量被修改?下面是一些示例代码:
first_line = f.gets().chomp()
column_count = first_line.split( %r{\s+} ).size()
print column_count, "\n"
我想声明 column_count 为 const,因为我在下面的程序中使用它,我真的不想错误地修改它。 Ruby 是否提供了执行此操作的语言结构,或者我应该接受它并意识到我的变量始终是可变的?
评论回复:
'我猜,“意外”覆盖变量的最可能原因是长代码块。我同意你观点的精神,但不同意这封信。你关于避免长代码块和不必要状态的观点是好的,但对于常量也可以用于描述实现内部代码的设计。我的代码中 const 的很大一部分值(value)来自注释哪些变量我应该更改,哪些我不应该更改,这样如果我明年回到我的代码,我就不会想要更改它们。同样的观点表明,由于良好的变量名和清晰的缩进而使用简短注释的代码比使用详细注释解释的笨拙的代码要好。
另一个选项似乎是 Ruby 的 #freeze 方法,我也喜欢它的外观。感谢大家的回复。
最佳答案
Ruby 变量通常是可变的。
Beyond Jeremy 的回答虽然完全准确,但不会引导您采用非常“主流”或惯用的 Ruby 风格,我不建议采用它。 Ruby 不像 C++ 那样工作,并且通常不太适合 C++ 最适合做的事情。操作系统、文字处理器之类的东西。
我猜,“意外”覆盖变量的最可能原因是长代码块。毕竟,如果您在五行方法中更改变量的值,它将非常明显!如果您习惯性地编写超过 10 行的代码块,那么这些代码块可能做了太多事情,我强烈建议您努力将它们分解(增加 cohesion )。尽可能地本地化变量以尽量减少意外副作用的可能性(减少 coupling )。
关于Ruby 等价于 C++ Const?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/766952/