2010-07-01 96 views
2

現在,我已經使用Rails足以知道什麼是軌道命令確實,但它如何它對我感興趣。如何/軌道文件夾/軌道文件做什麼

中的bin /軌文件(從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 

據我所知(和請糾正我,如果我錯了),需要不運行代碼,只需加載類等

我也可以找不到它們的根目錄中的rails目錄,所以我有點困惑,那裏的隱藏以及。

謝謝。

回答

4

require沒有運行代碼。這將包括所需文件中任何類和模塊之外的任何代碼以及方法聲明之外的類和模塊中的任何可執行代碼。正如neutrino所說,Ruby解釋器正在運行所需的文件中的代碼,以便定義源中的類。但是,如果您嘗試使用類似puts語句這樣的明顯副作用,這可能會更清晰一些。

試試這個作爲一個簡單的例子。創建一個文件hello.rbputs "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遵循它是如何工作的鏈條。

+0

很好的答案,謝謝。在這種情況下裝載是做什麼的? – thomasfedb 2010-07-02 13:21:09

4

所有的ruby代碼都是可執行代碼。類/模塊/方法定義也由解釋器執行,所以當你說require加載類時,這是真的,因爲加載一個類意味着執行它的代碼:)

這裏是你正在尋找的檔案:cli.rb。這是在railies。