tho*_*edb 2 ruby rubygems ruby-on-rails
现在,我已经足够使用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
Run Code Online (Sandbox Code Playgroud)
据我所知(如果我错了请纠正我),要求不运行代码,只加载类等.
我也找不到它们的gem根目录中的rails目录,所以我有点困惑,它也隐藏在哪里.
谢谢.
require确实运行代码.这将包括所需文件中任何类和模块之外的任何代码,以及方法声明之外的类和模块中的任何可执行代码.正如neutrino所说,ruby解释器正在运行所需文件中的代码,以便在源中定义类.但是,如果你尝试使用具有明显副作用的东西,如puts声明,这可能会更清楚一点.
试试这个作为一个简单的例子.创建一个hello.rb包含puts "Hello World"然后进入irb 的文件:
irb(main):001:0> require 'hello'
Hello World
=> true
Run Code Online (Sandbox Code Playgroud)
接下来,尝试一个简单类的示例,其中包含一些可执行代码.创建一个hello2.rb包含以下内容
class Hello
puts "class Hello being defined"
end
Run Code Online (Sandbox Code Playgroud)
然后从irb要求这个:
irb(main):001:0> require 'hello2'
class Hello being defined
=> true
Run Code Online (Sandbox Code Playgroud)
回过头来bin/rails看看Github中rails/cli的源代码,了解它的工作原理.
| 归档时间: |
|
| 查看次数: |
766 次 |
| 最近记录: |