现在,我已经使用Rails足以知道rails命令做了什么,但 它对我感兴趣。
bin / rails文件(来自github)如下:
#!/usr/bin/env ruby
begin
require "rails/cli"
rescue LoadError
railties_path = File.expand_path('../../railties/lib', __FILE__)
$:.unshift(railties_path)
require "rails/cli"
end
据我所知(如果我错了请纠正我),要求不运行代码,只加载类等。
我也找不到他们的gem根目录中的rails目录,所以我也有点困惑。
感谢。
答案 0 :(得分:5)
require
会运行代码。这将包括所需文件中任何类和模块之外的任何代码,以及方法声明之外的类和模块中的任何可执行代码。正如neutrino所说,ruby解释器正在运行所需文件中的代码,以便在源中定义类。但是,如果您尝试使用具有明显副作用的内容(例如puts
语句),这可能会更清楚。
试试这个简单的例子。创建一个包含hello.rb
的文件puts "Hello World"
,然后进入irb:
irb(main):001:0> require 'hello'
Hello World
=> true
接下来,尝试一个简单类的示例,其中包含一些可执行代码。创建一个包含以下内容的文件hello2.rb
class Hello
puts "class Hello being defined"
end
然后从irb:
要求这个irb(main):001:0> require 'hello2'
class Hello being defined
=> true
回到bin/rails
,查看Github中的source for rails/cli,了解其工作原理。
答案 1 :(得分:4)
所有ruby代码都是可执行代码。类/模块/方法定义也由解释器执行,所以当你说require
加载类时,它是真的,因为加载一个类意味着执行它的代码:)
以下是您要查找的文件:cli.rb。它在铁路上。