我想成为更好的代码..使我的代码更清晰,更易读。
我在c / c ++中看到的一件事是在局部变量上使用const。我认为告诉读者我的代码有很多价值,一旦设置了变量,它就不会在函数/方法中改变。
我想知道....有没有办法表明局部变量是const?
#for example
sql = "select * from table1 where status = #{iStatusId}"
connection.execute(sql)
sql不会在此方法中更改。我可以这样标记吗?
好的..这是一个不好的例子,但我认为重点是......我希望:)
编辑: 我在sql中添加了一些动态... iStatusId位是传递给方法的参数。
EDIT2: 我确实谷歌这...所有文章谈论幻数替换。这是一个没有脑子的东西,我认为是MACRO。干扰很容易......我正在寻找const ......它们是非常不同的东西。
答案 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]。
我希望在这里被证明是错误的。