如何在ruby / rails中声明const变量

时间:2013-01-15 23:35:14

标签: ruby-on-rails coding-style const

我想成为更好的代码..使我的代码更清晰,更易读。

我在c / c ++中看到的一件事是在局部变量上使用const。我认为告诉读者我的代码有很多价值,一旦设置了变量,它就不会在函数/方法中改变。

我想知道....有没有办法表明局部变量是const?

#for example 
sql = "select * from table1 where status = #{iStatusId}"
connection.execute(sql)

sql不会在此方法中更改。我可以这样标记吗?

好的..这是一个不好的例子,但我认为重点是......我希望:)

编辑: 我在sql中添加了一些动态... iStatusId位是传递给方法的参数。

EDIT2: 我确实谷歌这...所有文章谈论幻数替换。这是一个没有脑子的东西,我认为是MACRO。干扰很容易......我正在寻找const ......它们是非常不同的东西。

4 个答案:

答案 0 :(得分:1)

通过使用类似的东西来烹饪你描述的逻辑是很容易的:

class Thing

    def unchangeable_attribute
      @unchangeable_attribute
    end

    def unchangeable_attribute=(value)
      raise SomeError if @unchangeable_attribute
      @unchangeable_attribute = value
    end

end
但是,我倾向于同意戴夫·牛顿的观点,因为我很难想象出这样一个很好的用例......

答案 1 :(得分:0)

Ruby对象上定义的obj.freeze方法怎么样?来自docs

  

防止对obj的进一步修改。如果尝试修改,将引发RuntimeError。没有办法解冻冻结的物体。

答案 2 :(得分:-1)

常量只是以大写字母开头,所以以下内容可以正常使用:

MY_CONSTANT = 1234

但是,可以覆盖常量,但会发出警告。

答案 3 :(得分:-2)

红宝石中的Const不是严格合乎逻辑的。由于“所有”变量实际上只是掩盖指向对象的指针,因此将它们转换为const的c范例是没有意义的。

等于 const void * value ='bla';

您仍然可以更改值[1]。

我希望在这里被证明是错误的。