1

我在业余时间学习 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 的很大一部分价值来自于注释哪些变量我应该更改,哪些我不应该更改,因此如果我明年回到我的代码,我不会想更改它们。这与暗示由于良好的变量名和清晰的缩进而使用简短注释的代码比由详细注释解释的笨拙编写的代码更好的观点相同。

另一个选项似乎是 Ruby 的 #freeze 方法,我也喜欢它的外观。感谢大家的回复。

4

3 回答 3

4

Ruby变量通常是可变的。

除了 Jeremy 的回答,虽然完全准确,但不会引导您使用非常“主流”或惯用语的 Ruby 风格,我不建议采用它。Ruby 不像 C++ 那样工作,并且通常不太适合 C++ 最适合使用的东西。操作系统,文字处理器,诸如此类。

我猜,变量“意外”覆盖的最可能原因是长代码块。毕竟,如果您在五行方法中更改变量的值,那将是相当明显的!如果您习惯性地编写超过 10 行的代码块,那么这些代码块可能做的事情太多,我强烈建议您努力将它们分解(增加凝聚力)。尽可能本地化变量,以尽量减少意外副作用的机会(减少耦合)。

于 2009-04-20T08:18:21.813 回答
4

按照惯例,ruby 中的常量一般都是大写的,比如 COLUMN_COUNT。但正如所指出的,所有以大写字母开头的变量都是常量。

于 2009-04-20T14:40:24.953 回答
3

以大写字母开头的变量是 Ruby 中的常量。因此,您可以将代码更改为:

first_line   = f.gets().chomp()
Column_count = first_line.split( %r{\s+} ).size()
print Column_count, "\n"

现在,如果您尝试修改Column_count.

于 2009-04-20T05:02:45.340 回答