为什么这个变量未声明但仍然有效?

时间:2014-05-28 19:52:50

标签: ruby variables

我是初学者&刚开始通过Codecademy学习ruby。我知道这将是一个非常简单的问题。为什么我们在此代码中声明answer2?他们俩都不平等吗?

print "This is my question?"
answer = gets.chomp
answer2 = answer.capitalize 
answer.capitalize!

感谢。

1 个答案:

答案 0 :(得分:1)

他们试图教你capitalizecapitalize!之间的区别。第一个不修改字符串,而是返回它的修改后的副本。而后者(带有爆炸!标记)会修改字符串本身。

因此,为了进一步解释上述示例,请考虑以下内容:

print "This is my question?"
answer = gets.chomp
answer2 = answer.capitalize
puts "answer= " + answer + ", while answer2= " + answer2
answer.capitalize!
puts "now answer= " + answer

因此,如果我们执行前面的代码并在提示时输入foobar,则输出将为:

This is my question?foobar
answer= foobar, while answer2= Foobar
now answer= Foobar

通常,ruby中的方法不会修改调用它们的对象,而是返回修改后的副本。因此,在some_object.some_method中,some_method方法不会更改some_object,但会返回一个副本并进行一些修改。或者,使用bang !标记的方法会更改调用它们的对象。因此some_object.some_method!会更改some_object本身。