我最近学习了Ruby编程语言,总而言之,它是一门很好的语言.但我很惊讶地发现它并不像我预期的那么简单.更准确地说,"最不惊讶的规则"对我来说似乎并不受到尊重(当然这是非常主观的).例如:
x = true and false
puts x # displays true!
Run Code Online (Sandbox Code Playgroud)
和着名的:
puts "zero is true!" if 0 # zero is true!
Run Code Online (Sandbox Code Playgroud)
你会警告一个Ruby新手的其他"问题"是什么?
我的理解是,if行前面的语句在行前面的代码之前进行了评估:
'never shown' if (false)
Run Code Online (Sandbox Code Playgroud)
并且可以在if声明中进行分配.
'shown' if (value = 'dave is king')
value #=> "dave is king"
Run Code Online (Sandbox Code Playgroud)
并且,当分配不存在的变量时,将创建该变量.事先不需要它存在.这是真的?
如果所有这些假设都成立,为什么会失败呢?
error_array << error if (error = import_value(value))
#=> undefined local variable or method `error' for
Run Code Online (Sandbox Code Playgroud)
它在数组推右前分配给错误?我想了解什么时候进行评估.
这个确实有效:
if (error = import_value(value))
error_array << error
end
Run Code Online (Sandbox Code Playgroud)
现在我真的很困惑.
for i in (0..5)
if(i==0)
i=4
end
puts i
end
Run Code Online (Sandbox Code Playgroud)
在上面的程序中,我将输出除外 - 4 5
但相反,它是 - 4 1 2 3 4 5
所以我得出结论,循环变量没有改变.怎么能改变它?有人能告诉我吗?
实际上,在我的程序中,我需要保存当前的循环状态并稍后进行检索,以便在下一个启动程序从其剩余的同一点恢复.