Ruby新人,以前工作中用awk编程。08年开始接触Ruby,当时觉得块循环的表达方法不符合习惯,就转到python去了。到了python3,中文输入输出变得很麻烦,而我用编程大多是处理中文。Ruby中文处理没问题,还内置了正则表达式,所以现在决定使用Ruby。
写了一些小程序。发现block内循环时内部变量会消失,让我感到迷惑。例如,一个文件三行一组,读入处理时分别对每行进行处理:
========文件例子==========
1
a
end
2
c
end
3
e
end
4
g
end
5
o
end
===========================
代码:
File.open('1', 'r').each_with_index do |line, i |
if i%3==0
level = line.chomp
elsif i%3==1
str = line.chomp
else
end_line = line.chomp
puts "#{level} #{str} #{end_line}"
end
end
=============================
只能输出end_line,level和str都消失了:
$ruby t.rb
end
end
end
end
end
我清楚在块前先定义level, str, end_line,就能正常运行。问题是为什么块内循环,每循环一次,只保留该循环涉及的局部变量,没涉及的不保留?这个问题显得很怪异。
希望前辈们给予解疑。
写了一些小程序。发现block内循环时内部变量会消失,让我感到迷惑。例如,一个文件三行一组,读入处理时分别对每行进行处理:
========文件例子==========
1
a
end
2
c
end
3
e
end
4
g
end
5
o
end
===========================
代码:
File.open('1', 'r').each_with_index do |line, i |
if i%3==0
level = line.chomp
elsif i%3==1
str = line.chomp
else
end_line = line.chomp
puts "#{level} #{str} #{end_line}"
end
end
=============================
只能输出end_line,level和str都消失了:
$ruby t.rb
end
end
end
end
end
我清楚在块前先定义level, str, end_line,就能正常运行。问题是为什么块内循环,每循环一次,只保留该循环涉及的局部变量,没涉及的不保留?这个问题显得很怪异。
希望前辈们给予解疑。