Ruby中區分運行來源的方法

Ruby中區分運行來源的方法,這篇文章主要介紹了Ruby中區分運行來源的方法,本文講解的是類似Python中的if __name__ == '__main__':效果,其實Ruby中也有類似語法,需要的朋友可以參考下
關鍵字:Ruby、區分運行來源

當我們在寫模塊的時候,或多或少需要直接運行這個文件也可以執行一些方法,但是這樣對于當這個模塊被require或者include時,顯得不好,在ruby里,有沒有區分運行來自當前文件,還是被require的目標文件調用呢?

Python可以

比如像Python這樣

復制代碼 代碼如下:

if __name__ == '__main__':
    print "from direct running"

Ruby當然也可以

對于處處為程序員著想,擁有快樂編程理念的Ruby來說當然是可以區別的。其原理就是判斷啟動文件是否為模塊的代碼文件。

復制代碼 代碼如下:

if __FILE__ == $0
    puts 'called from direct running'
end

舉個例子

工具類模塊utils.rb

復制代碼 代碼如下:

module Utils
    class StringUtils
        def self.test
            puts "test method myfile=" + __FILE__ + ';load from ' +  $0
        end
    end
end

if __FILE__ == $0
    puts 'called from direct running'
    Utils::StringUtils.test()
end

直接運行,結果,if條件成立,執行了輸出

復制代碼 代碼如下:

20:04:37-androidyue~/rubydir/test$ ruby utils.rb
called from direct running
test method myfile=utils.rb;load from utils.rb

引用Utils的類test.rb

復制代碼 代碼如下:

require './utils'
Utils::StringUtils.test()

運行結果,引入模塊的條件不成立,沒有輸出called from direct running

復制代碼 代碼如下:

20:08:07-androidyue~/rubydir/test$ ruby test.rb
test method myfile=/home/androidyue/rubydir/test/utils.rb;load from test.rb

众人帮太赚钱了