回憶一下函數的要點,然后一邊做這節練習,一邊注意一下函數和文件是如何一起協作發揮作用的。
~~~
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: 重視各種符號