回忆一下函数的要点,然后一边做这节练习,一边注意一下函数和文件是如何一起协作发挥作用的。
~~~
input_file = ARGV[0]
def print_all(f)
puts f.read()
end
def rewind(f)
f.seek(0, IO::SEEK_SET)
end
def print_a_line(line_count, f)
puts "#{line_count} #{f.readline()}"
end
current_file = File.open(input_file)
puts "First let's print the whole file:"
puts # a blank line
print_all(current_file)
puts "Now let's rewind, kind of like a tape."
rewind(current_file)
puts "Let's print three lines:"
current_line = 1
print_a_line(current_line, current_file)
current_line = current_line + 1
print_a_line(current_line, current_file)
current_line = current_line + 1
print_a_line(current_line, current_file)
~~~
特别注意一下,每次运行 `print_a_line` 时,我们是怎样传递当前的行号信息的。
# 你应该看到的结果
* * * * *
~~~
$ ruby ex20.rb test.txt
First let's print the whole file:
To all the people out there.
I say I don't like my hair.
I need to shave it off.
Now let's rewind, kind of like a tape.
Let's print three lines:
1 To all the people out there.
2 I say I don't like my hair.
3 I need to shave it off.
$
~~~
# 加分习题
* * * * *
1. 通读脚本,在每行之前加上注释,以理解脚本里发生的事情。
2. 每次 `print_a_line` 运行时,你都传递了一个叫 `current_line`的变量。在每次调用函数时,输出 `current_line` 的值,跟踪一下它在 `print_a_line` 中是怎样变成 `line_count` 的。
3. 找出脚本中每一个用到函式的地方。检查 `def` 一行,确认参数没有用错。
4. 上网研究一下 `file` 中的 `seek` 函数是做什么用的。试着运行` ri file` 看看能不能从 `rdoc` 中学到更多。
5. 研究一下 `+= `这个简写操作符号的作用,写一个脚本,把这个操作符号用在里边试一下。
- 笨方法更简单
- 习题 00: 准备工作
- 习题 01: 第一个程序
- 习题 02: 注释和#号
- 习题 03: 数字和数学计算
- 习题 04: 变量的命名
- 习题 05: 更多的变量和输出
- 习题 06: 字符串和文字
- 习题 07: 更多输出
- 习题 08: 输出,输出
- 习题 09: 输出,输出,输出~
- 习题 10: 那是啥?
- 习题 11: 提问
- 习题 12: 模块
- 习题 13: 参数,解包,参数
- 习题 14: 提示和传递
- 习题 15: 读取文件
- 习题 16: 操作文件
- 习题 17: 更多的文件操作
- 习题 18: 命名,变量,代码,函数
- 习题 19: 函数和变量
- 习题 20: 函数和文件
- 习题 21: 函数可以传入信息
- 习题 22: 到现在你学到了什么?
- 习题 23: 阅读一些代码
- 习题 24: 更多练习
- 习题 25: 更多更多的练习
- 习题 26: 恭喜你,现在来考试了!
- 习题 27: 记住逻辑关系
- 习题 28: Boolean表达式练习
- 习题 29: 如果
- 习题 30: Else 和 If
- 习题 31: 做出判断
- 习题 32: 循环和数组
- 习题 33: While
- 习题 34: 存取数组里的元素
- 习题 35: 分支和函数
- 习题 36: 设计和测试
- 习题 37: 重视各种符号