文件操作
本课属于 Coddy Ruby 学习旅程的“面向对象编程”单元。第 1 课,共 57 课。
实际程序会拆分到多个文件中。Ruby 文件使用 require_relative 加载另一个文件,后面跟着相对于当前文件的路径,通常省略 .rb 后缀。在这一行之后,就可以使用已加载文件中的方法和类:
# greeting.rb
def greeting(name)
"Hello, #{name}!"
end
# main.rb
require_relative 'greeting'
puts greeting("Ada")运行 ruby main.rb 会打印 Hello, Ada!:main.rb 加载 greeting.rb,然后调用其中的方法。
程序从你运行的文件开始执行,这里是 main.rb,Ruby 会从上到下运行它。require_relative 会在执行到该语句时运行另一个文件,而且只会运行第一次:第二次调用 require_relative 'greeting' 会返回 false,不执行任何操作。只有定义某个名称的文件加载后,才能使用该名称:
# main.rb
# puts greeting("Bo") # NoMethodError:greeting.rb 尚未加载
require_relative 'greeting' # 运行 greeting.rb,返回 true
require_relative 'greeting' # 已加载,返回 false
puts greeting("Bo")通常的布局是每个文件放一个类,文件名采用该类名称的 snake_case 格式:class Dog 放在 dog.rb 中,class BankAccount 放在 bank_account.rb 中。在本单元的挑战中,main.rb 包含提供的输入/输出代码,并在开头为每个文件写一行 require_relative,按加载顺序排列:某个类所基于的类要先加载。
dog.rb # class Dog ... end
bank_account.rb # class BankAccount ... end
functions.rb # 辅助方法
main.rb # require_relative 语句,然后是输入和输出代码文件共享哪些内容取决于名称的类型。在文件顶部用 def 定义的方法、类和常量都可供之后加载的每个文件使用。局部变量只属于它所在的文件:
# settings.rb
limit = 3 # 局部变量:只有 settings.rb 能访问它
MAX_ITEMS = 3 # 常量:加载后可访问
def limit_text
"at most #{MAX_ITEMS}"
end
# main.rb
require_relative 'settings'
puts limit_text # 最多 3 个
puts MAX_ITEMS # 3
# puts limit # NameError:未定义的局部变量挑战
简单这个程序有两个文件。main.rb 会加载 greeting.rb,读取姓名并打印 greeting(name) 的结果。在 greeting.rb 中完成 greeting 函数,使其在姓名为 Ada 时返回 Hello, Ada!,或在姓名为空时返回 Hello, friend!。
你的代码应写在 greeting.rb 中。main.rb 包含提供的输入/输出代码,不能编辑。
亲手试试
require_relative 'greeting'
# 提供的输入输出代码:保持原样
input = []
while (line = gets)
input << line.chomp
end
input.each { |name| puts greeting(name) }
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
自己练习: Ruby 在线编译器