婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 寫一個漂亮Rakefile的方法

寫一個漂亮Rakefile的方法

熱門標簽:中牟外呼系統違法嗎 天津外呼系統怎么收費 柯城手機地圖如何做地圖標注 AI電銷機器人 線路 漯河電銷 巫師3地圖標注魔力之所 外呼線路從哪里出來的 征服者企業地圖標注 淮安自動外呼系統供應商

Rake 我就不再介紹了,Ruby 的 Make ,許多方面都比 Make 要更好用一些。和 Makefile 不同的是,Rakefile 本身其實就是一段 Ruby 代碼,這樣的好處有很多,一方面在 Rake 里面就可以很直接地做任何 Ruby 能做的事了,另一方面由于 Ruby 對 DSL 支持良好,所以 Rakefile 通常看起來也并不那么“代碼”。

不過,代碼始終是代碼,Makefile 尚且可以寫得很亂,Rakefile 要寫亂就更容易了,幸運地是,Rake 提供了一些功能讓我們可以來對 Rakefile 做一些組織工作。

其中之一就是 import 功能,把不同功能的 task 寫到不同的文件中,例如,像這個樣子:

復制代碼 代碼如下:

Rakefile
task/
  +-- doc.rake
  +-- compile.rake
  `-- deploy.rake

這樣,在 Rakefile 里寫上
復制代碼 代碼如下:

import("task/doc.rake")

這樣的語句導入各個子任務即可,不同的任務寫到不同的文件里面就不會一團糟了。而且,import 同 Ruby 自己的 require 不一樣,import 并不是立即進行導入的,而是在整個 Rakefile 執行結束之后才全部導入,因此,可以在任意的地方寫 import ,而不用擔心依賴關系,需要共享的變量之類的只要在主 Rakefile 中定義了即可。

import 是組織不同的功能模塊,除此之外,Rake 還允許我們對一些重復性的任務進行抽象,具體來說,就是自定義的 task 。通常情況下,我們使用 Rake 提供的通用 task 和文件 task 來構造我們需要完成的工作,除此之外,Rake 還自帶了一些針對特殊任務的 task 類型,例如構建 rdoc 或者運行 test 等。實際上,一種任務就是一個普通的 Ruby 類,我們可以繼承 Rake 里的 Task 類并重新定義相關的函數來實現自定義的 task 類型。不過,這樣多少有些麻煩,實際上,很多時候我們要定義的任務都可以分解為一些小任務用內置的通用 task 和 file task 來實現的,這個時候可以用 Tasklib 來更方便地定義自定義的任務。

具體地來說,就是寫一個類,繼承自 Tasklib (雖然實際上只是約定而并不是必須的),然后在這個類的初始化函數里用 task 或者 file 來定義實際完成任務的子 task 即可。用一個實際的例子來說,比如說,我們可以定義一個 ErlcTask ,可以用來把一些 Erlang 文件編譯到某個目錄下,并在 clean 的時候自動能把編譯出來的 .beam 文件清理掉:

復制代碼 代碼如下:

require 'rake'
require 'rake/clean'
require 'rake/tasklib'

class ErlcTask Rake::TaskLib
  attr_accessor :name
  attr_accessor :sources
  attr_accessor :dest_dir
  attr_accessor :include_path
  attr_accessor :flags
  attr_accessor :extra_dep

  def initialize(name = :erlc)
    # default values
    if name.is_a? Hash
      @name = name.keys.first
      @extra_dep = name.values.first
    else
      @name = name
      @extra_dep = []
    end
    @sources = FileList[]
    @dest_dir = '.'
    @include_path = []
    @flags = "-W +warn_unused_vars +warn_unused_import"

    yield self if block_given?
    define
  end

 
  def define
    beams = @sources.pathmap(File.join(@dest_dir, '%n.beam'))

    include_path = Array(@include_path).map{|incl|"-I"+incl}.join(" ")

    directory @dest_dir
    beams.zip(@sources).each do |beam, source|
      file beam => source do
        sh "erlc -pa #{@dest_dir} #{@flags} #{include_path} -o #{@dest_dir} #{source}"
      end
    end

    task @name => beams + Array(@extra_dep)
    CLEAN.include(beams)
  end
end

首先定義一些 Task 相關的屬性,在初始化函數里設置初值,然后調用 block 來填充實際的值,最后調用 define 函數,define 函數就使用 directory 、file 和 task 分別定義了建立目錄、編譯和清理的任務。如果了解 Ruby 和 Rake 的基本語法的話,應該很容易看明白了。

接下來把這個文件保存到某個 .rb 里,然后在 Rakefile 里 require 之,就可以這樣寫了:

復制代碼 代碼如下:

ErlcTask.new :compile do |t|
    t.sources = FileList['src/*.erl']
    t.dest_dir = '../ebin'
    t.include_path = '../include'
    t.extra_dep = :library
end

看起來就清爽多了!并且可以重復利用。  末了,順便再感嘆一下,雖然最近都是用 Python 用得多一些,但是每次再寫 Ruby 都能感覺到寫起來很舒服,這是基本不可能在 Python 里找到的感覺啊!

標簽:河池 棗莊 克拉瑪依 甘孜 南昌 內江 西雙版納 大慶

巨人網絡通訊聲明:本文標題《寫一個漂亮Rakefile的方法》,本文關鍵詞  寫,一個,漂亮,Rakefile,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《寫一個漂亮Rakefile的方法》相關的同類信息!
  • 本頁收集關于寫一個漂亮Rakefile的方法的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产精品乱子久久久久| 日韩欧美在线影院| 久久久久久综合| 亚洲视频每日更新| 中文字幕五月欧美| 欧美亚男人的天堂| 日本一区二区三区免费乱视频| 国产精品一二三区| 午夜成人免费电影| 欧美不卡一区二区| 欧美成人猛片aaaaaaa| 欧美日韩中文字幕一区二区| 精品成a人在线观看| 久久成人久久爱| 紧缚捆绑精品一区二区| 一区二区三区鲁丝不卡| 国产情人综合久久777777| 26uuu国产一区二区三区| 亚洲一区二区三区不卡国产欧美| 中文字幕欧美三区| 亚洲国产经典视频| 一区二区激情视频| 日韩av在线播放中文字幕| 五月开心婷婷久久| 国产高清精品久久久久| 91亚洲大成网污www| 亚洲三级电影网站| 亚洲高清在线视频| 激情综合色综合久久| 久久久久久日产精品| 亚洲人成网站在线| 国产在线精品国自产拍免费| 精品盗摄一区二区三区| 中文字幕亚洲欧美在线不卡| 亚洲一区自拍偷拍| 亚洲综合激情网| 亚洲啪啪综合av一区二区三区| 欧美日韩国产首页在线观看| 欧美v国产在线一区二区三区| 亚洲欧美日韩精品久久久久| 日韩精品中文字幕一区二区三区| 亚洲欧洲日韩一区二区三区| 亚洲欧美偷拍另类a∨色屁股| 亚洲乱码中文字幕| 国产成人在线网站| 日韩美女一区二区三区| 亚洲成av人片| 波多野结衣在线aⅴ中文字幕不卡| 激情丁香综合五月| 欧美性一区二区| 精品国产亚洲在线| 亚洲尤物视频在线| 欧美成人猛片aaaaaaa| 中文字幕免费不卡| 亚洲成人动漫在线观看| 成人小视频在线| 午夜精品视频在线观看| 国产福利一区二区| 欧美性猛片aaaaaaa做受| 亚洲最快最全在线视频| 欧美色精品在线视频| 日韩影院精彩在线| 国产精品久久久久影院| 亚洲黄色小视频| 九九热在线视频观看这里只有精品| 欧美色图激情小说| 国产精品欧美一区喷水| 欧美日本一道本在线视频| 国产成人av一区二区三区在线观看| 国产成人精品www牛牛影视| 亚洲人成网站在线| 国产午夜亚洲精品不卡| 天天爽夜夜爽夜夜爽精品视频| 欧洲av一区二区嗯嗯嗯啊| 欧美一卡二卡三卡四卡| 成人精品电影在线观看| 麻豆视频观看网址久久| 欧美美女直播网站| 亚洲天堂成人在线观看| 日韩精品一区二区三区老鸭窝| 亚洲午夜久久久久久久久电影院| 日韩欧美国产三级| 国产一二精品视频| 日韩精品亚洲专区| 国产成人8x视频一区二区| 99久久亚洲一区二区三区青草| 欧美激情在线看| 91麻豆免费观看| 成人av在线网| aa级大片欧美| 91免费版在线看| 99久久精品费精品国产一区二区 | 日韩二区三区在线观看| 亚洲在线观看免费| 日本午夜一区二区| 久久精品国产亚洲高清剧情介绍| 亚洲视频在线观看一区| 99久久99久久综合| 欧美日韩在线播放三区| 日韩精品一区二区三区四区| 精品国产乱码久久久久久牛牛| 欧美一级黄色大片| 国产精品国产自产拍高清av| 亚洲欧美偷拍三级| 日韩黄色在线观看| 国产精品九色蝌蚪自拍| 一区二区不卡在线视频 午夜欧美不卡在| 国产精品福利一区二区三区| 亚洲国产综合人成综合网站| 久久99国产精品麻豆| 日本韩国欧美国产| 久久久精品综合| 成人福利电影精品一区二区在线观看| 一区二区三区在线视频播放| 久久精品国产免费| 欧美一区二区久久久| 日本麻豆一区二区三区视频| 大陆成人av片| 中文字幕亚洲视频| 欧美精品18+| 成人福利视频在线看| 亚洲自拍另类综合| av成人免费在线| 日韩综合在线视频| 国产精品嫩草久久久久| 在线不卡一区二区| 亚洲色图在线视频| 亚洲精品日日夜夜| 欧洲中文字幕精品| 综合久久一区二区三区| 国产精品一区二区你懂的| 日韩精品一区二区在线| 狠狠色狠狠色综合系列| 国产精品乱码久久久久久| 成人教育av在线| 亚洲色欲色欲www| 欧美人妇做爰xxxⅹ性高电影| 亚洲美女区一区| 欧美一级片在线看| av一本久道久久综合久久鬼色| 亚洲男同性恋视频| 26uuu国产在线精品一区二区| www.欧美.com| 国产一区二区三区四区在线观看| 国产精品欧美一区喷水| 欧美麻豆精品久久久久久| 国产成人精品www牛牛影视| 91麻豆国产香蕉久久精品| 久久精品国产亚洲a| 亚洲欧美偷拍三级| 日本一区二区三区四区在线视频| 日韩一区二区麻豆国产| 亚洲欧美日韩国产中文在线| 精品一区二区三区日韩| 国内精品在线播放| 国产精品三级av在线播放| 亚洲伊人色欲综合网| 国产一二精品视频| 美女精品一区二区| www.成人网.com| 日韩一区二区在线看| 亚洲欧洲精品天堂一级| 国产麻豆成人精品| 国产日韩高清在线| 亚洲午夜久久久久久久久电影院| 国产.精品.日韩.另类.中文.在线.播放| 欧美一区二区在线免费观看| 99re8在线精品视频免费播放| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 91精品在线免费观看| 欧美精品在线视频| 欧美日韩一区中文字幕| 欧美中文一区二区三区| 91最新地址在线播放| 99国产精品久| 国产精品护士白丝一区av| 成人性生交大片免费看在线播放 | 中文字幕不卡在线观看| 国产午夜精品久久久久久久| 日韩一区二区精品在线观看| 精品国产自在久精品国产| 国产情人综合久久777777| 国产精品乱人伦| 亚洲综合999| 久久99国产精品久久99果冻传媒| 国产激情91久久精品导航| 91黄色在线观看| 精品国产乱子伦一区| 亚洲免费av观看| 亚洲在线一区二区三区| 蜜臀精品久久久久久蜜臀| 99久久精品一区| xvideos.蜜桃一区二区| 亚洲午夜激情网页| thepron国产精品| 久久精品视频网| 蜜桃一区二区三区四区| 欧美亚洲国产怡红院影院| 亚洲h动漫在线| 国产高清不卡一区二区|