Ruby中这两个兑现字符串替换的方法有何不同?为什么用FOR循环会报错
Ruby中这两个实现字符串替换的方法有何不同?为什么用FOR循环会报错?
第一个:用each实现的字符替换函数如下
第二个:用for循环实现的
第二个方法报错
这是为什么呢?怎么解决?请高手帮忙!
------解决方案--------------------
又测试了下,是因为你的Array类型数据越界了
arr的数据最大是arr[length-1]
arr[length]是Nil,而NilClass是没有index方法,所以报错了。
第一个:用each实现的字符替换函数如下
def findreplace(str,str1)
file=File.open("c:\\test.rb", 'r+')
arr=file.readlines
arr.each do |x|
y= x.index(str)
x.gsub!(str,str1)
puts arr unless y==nil
end
end
第二个:用for循环实现的
def findreplace2(str,str1)
#str='unless'
file = File.open("c:\\test.rb", 'r+')
arr = file.readlines
for i in 1..arr.length do
x = arr[i].index(str)
if x != nil
arr[i].gsub!(str, str1)
puts arr
end
end
end
第二个方法报错
C:\Documents and Settings\hongk\My Documents\NetBeansProjects\RubyCheatApplication\lib\main.rb:57:in `findreplace2': undefined method `index' for nil:NilClass (NoMethodError)
from C:\Documents and Settings\hongk\My Documents\NetBeansProjects\RubyCheatApplication\lib\main.rb:56:in `each'
from C:\Documents and Settings\hongk\My Documents\NetBeansProjects\RubyCheatApplication\lib\main.rb:56:in `findreplace2'
from C:\Documents and Settings\hongk\My Documents\NetBeansProjects\RubyCheatApplication\lib\main.rb:64
这是为什么呢?怎么解决?请高手帮忙!
------解决方案--------------------
又测试了下,是因为你的Array类型数据越界了
arr的数据最大是arr[length-1]
arr[length]是Nil,而NilClass是没有index方法,所以报错了。