Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby C++;康斯特?_Ruby_Variables_Constants_Mutable - Fatal编程技术网

Ruby C++;康斯特?

Ruby C++;康斯特?,ruby,variables,constants,mutable,Ruby,Variables,Constants,Mutable,我在业余时间学习Ruby,我有一个关于常量的语言构造的问题。Ruby是否有一个等价的C++ const关键字来保持变量不被修改?下面是一些示例代码: first_line = f.gets().chomp() column_count = first_line.split( %r{\s+} ).size() print column_count, "\n" 我想将列_count声明为const,因为我在下面的程序中使用了它,我真的不想错误地修改它。Ruby是否提供了一种语言结构来实现这一点

我在业余时间学习Ruby,我有一个关于常量的语言构造的问题。Ruby是否有一个等价的C++ const关键字来保持变量不被修改?下面是一些示例代码:

first_line   = f.gets().chomp()
column_count = first_line.split( %r{\s+} ).size()
print column_count, "\n"
我想将列_count声明为const,因为我在下面的程序中使用了它,我真的不想错误地修改它。Ruby是否提供了一种语言结构来实现这一点,还是我应该接受它并意识到我的变量总是可变的

对评论的答复:

我想,“意外”重写变量最有可能的原因是长代码块。您关于避免长代码块和不必要的状态的观点是很好的,但是对于常量,在描述实现内部的代码设计时也很有用。在我的代码中,const的很大一部分值来自于注释哪些变量我应该更改,哪些不应该更改,这样,如果我明年回到我的代码中,我就不会试图更改它们。这与使用简短注释(因为变量名好、缩进清晰)的代码比使用详细注释解释的笨拙代码要好的观点是一样的


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

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

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

现在,如果您试图修改
Column\u count

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

first_line   = f.gets().chomp()
Column_count = first_line.split( %r{\s+} ).size()
print Column_count, "\n"
现在,如果您试图修改
Column\u count

Ruby变量通常是变量,那么您将得到一个警告

超越Jeremy的答案,虽然完全准确,但不会让你找到一种非常“主流”或符合习惯的Ruby风格,我不推荐采用它。露比不象C++那样工作,通常不适合C++最好的东西。操作系统,文字处理器,诸如此类的东西

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

Ruby变量通常是可变的

超越Jeremy的答案,虽然完全准确,但不会让你找到一种非常“主流”或符合习惯的Ruby风格,我不推荐采用它。露比不象C++那样工作,通常不适合C++最好的东西。操作系统,文字处理器,诸如此类的东西


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

按照惯例,ruby中的常量通常都写在所有大写字母中,例如COLUMN\u COUNT。但正如所指出的,所有以大写字母开头的变量都是常量

按照惯例,ruby中的常量通常以所有大写形式写入,例如COLUMN\u COUNT。但正如所指出的,所有以大写字母开头的变量都是常量

快速google显示快速google显示约定是将常量设为所有大写,因此在本例中,列\计数。但这不会阻止您更改指定给列\计数的对象。您仍然可以修改对象的内部状态。为了防止出现这种情况,请使用#freeze.Convention将常量设为所有大写,因此在本例中,列_COUNT.Not会阻止您更改指定给列_COUNT的对象。您仍然可以修改对象的内部状态。为了防止这种情况发生,请使用“冻结”。