-1

我想成为一个更好的代码.. 让我的代码更简洁、更易读。

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

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

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

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

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

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

EDIT2:我用谷歌搜索了这个......所有文章都谈到了幻数替换。这很简单,我认为是 MACRO。CONTATS 很容易......我正在寻找 const.. 它们是非常不同的东西。

4

4 回答 4

1

通过使用类似这样的东西来制作您所描述的逻辑很容易:

class Thing

    def unchangeable_attribute
      @unchangeable_attribute
    end

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

end

不过,我倾向于同意戴夫牛顿的观点,因为我很难想象这样的事情会有一个很好的用例......

于 2013-01-16T00:56:38.290 回答
0

obj.freezeRuby 对象上定义的方法呢​​?从文档

防止对 obj 进行进一步修改。如果尝试修改,将引发 RuntimeError。无法解冻冻结的对象。

于 2013-01-16T07:56:04.177 回答
-1

常量仅以大写字母开头,因此以下内容可以正常工作:

MY_CONSTANT = 1234

然而,覆盖常量是可能的,尽管它会发出警告。

于 2013-01-15T23:46:06.933 回答
-2

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

它将等于 const void * value = 'bla';

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

我很想在这里被证明是错误的。

于 2013-01-16T00:47:58.860 回答