【发布时间】:2011-07-31 12:08:01
【问题描述】:
在this 问题中,我发现了一个关于Java 中final 变量范围的有趣细节。我不太了解 Java,但我认为 final 与 Ruby 中的常量相同。
在 C++ 中这是可能的:
for(int i = 0; i < 5; ++i){
const int c = i * 5;
std::cout << c << std::endl;
}
虽然尝试在循环期间更改值是不可能的,但会导致编译时错误。
我很好奇 Ruby 将如何处理这个问题,启动了 irb 并编写了这段代码来测试它:
5.times do |x|
XPI = x * Math::PI
puts x
end
结果是
0.0
(irb):27: warning: already initialized constant XPI
3.141592653589793
(irb):27: warning: already initialized constant XPI
6.283185307179586
(irb):27: warning: already initialized constant XPI
9.42477796076938
(irb):27: warning: already initialized constant XPI
12.566370614359172
=> 5
所以我的问题是:有没有办法在循环开始时分配一个常量,为每次循环迭代初始化而不创建警告消息?它可能有一些现实世界的用例,当我想基于迭代器变量进行计算然后确保剩余循环的结果不会改变时。
你每天都不需要什么,但我只是好奇。
【问题讨论】: