Menu
CoddyTech

文件操作

本课属于 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:未定义的局部变量
challenge icon

挑战

简单

这个程序有两个文件。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) }
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: Ruby 在线编译器