ruby中的方法可以以问号和叹号结尾,问号通常用于谓语方法,这种方法返回一个布尔值。例如array和hash类都定义了一个empty?方法,这个方法用于测试数据结构中有没有元素。
如果方法以叹号结尾,这意味着我们在使用这个方法的时候要小心,比如大多数核心的ruby类库方法都提供两个同名的方法,一个以叹号结尾,一个没有,
区别在于,如果使用没有叹号结尾的方法,你在调用它的时候会得到当前对象的一个拷贝而不会修改原始对象,而如果使用带有叹号的方法,你在调用它的时候会直接修改当前对象的值。
比如array类对象中定义的sort和sort!方法。
i =0
breeds = [“quarter”, “arabian”, “appalosa”, “paint” ]
puts breeds.size #=> 4
temp =[]
while i <breeds.size do
temp <<breeds[i].capitalize
i += 1
end
p t=temp.sort #=> [“Appalosa”, “Arabian”, “Paint”,”Quarter”]把临时的temp.sort值赋给t了breeds.replace( temp)<——————–temp值其实不变
p breeds # =>[“quarter”, “arabian”, “appalosa”, “paint” ]<—————不变
结果:
C:\Users\zjyivad\Desktop\Ruby>111.rb
4
[“Appalosa”,”Arabian”, “Paint”, “Quarter”]
[“Quarter”,”Arabian”, “Appalosa”, “Paint”]
i =0
breeds = [“quarter”, “arabian”, “appalosa”, “paint” ]
puts breeds.size #=> 4
temp =[]
while i <breeds.size do
temp <<breeds[i].capitalize
i += 1
end
p t=temp.sort #=> [“Appalosa”, “Arabian”, “Paint”, “Quarter”]
breeds.replace(temp )
p breeds=>[“quarter”, “arabian”, “appalosa”, “paint” ]
temp.sort!
breeds.replace(temp )
p breeds # =>[“Appalosa”, “Arabian”, “Paint”, “Quarter”]
4
[“Appalosa”,”Arabian”, “Paint”, “Quarter”]
[“Quarter”,”Arabian”, “Appalosa”, “Paint”]
[“Appalosa”,”Arabian”, “Paint”, “Quarter”]