代码之家  ›  专栏  ›  技术社区  ›  James Thompson

红宝石当量的C++常量?

  •  1
  • James Thompson  · 技术社区  · 16 年前

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

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

    我想声明列计数为const,因为我在下面的程序中使用它,我真的不想错误地修改它。Ruby是为实现这一点提供了一个语言结构,还是我应该接受它并认识到我的变量总是可变的?

    对评论的回应:

    “我想,导致变量“意外”重写的最可能原因是代码块太长。”我同意你的观点,但不同意这封信。您关于避免长代码块和不必要状态的观点是一个很好的观点,但是对于常量来说,在描述实现内部代码的设计时也很有用。在我的代码中,const值的很大一部分来自于注释哪些变量是我应该更改的,哪些变量是我不应该更改的,这样我就不会在明年返回代码时更改它们了。这也表明,由于变量名好且缩进清晰而使用简短注释的代码比用详细注释解释的笨拙编写的代码要好。

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

    3 回复  |  直到 16 年前
        1
  •  3
  •   Paige Ruten    16 年前

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

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

    现在,如果您尝试修改,将收到警告 Column_count .

        2
  •  4
  •   Mike Woodhouse    16 年前

    红宝石 变量 一般来说是可变的。

    除了杰里米的回答之外,虽然完全准确,但这并不能让你找到一种非常“主流”或惯用的红宝石风格,我不建议你采用它。露比不象C++那样工作,通常不适合C++最好使用的东西。操作系统,文字处理器,诸如此类的东西。

    我猜,导致变量“意外”重写的最可能原因是代码块太长。毕竟,如果你在五行方法中改变一个变量的值,它将是相当明显的!如果你习惯于写超过10行的代码块,那么这些代码块可能做了太多的事情,我强烈建议你努力将它们分开(增加 cohesion )尽可能多地定位变量,以尽量减少意外副作用(减少 coupling )

        3
  •  4
  •   nkassis    16 年前

    按照惯例,Ruby中的常量通常用所有的大写字母写,如column_count。但正如所指出的,所有以大写字母开头的变量都是常量。

    推荐文章