国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

寫一個漂亮Rakefile的方法

2019-10-26 19:23:06
字體:
供稿:網(wǎng)友

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

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

其中之一就是 import 功能,把不同功能的 task 寫到不同的文件中,例如,像這個樣子:
代碼如下:
Rakefile
task/
  +-- doc.rake
  +-- compile.rake
  `-- deploy.rake
這樣,在 Rakefile 里寫上
代碼如下:
import("task/doc.rake")
這樣的語句導(dǎo)入各個子任務(wù)即可,不同的任務(wù)寫到不同的文件里面就不會一團(tuán)糟了。而且,import 同 Ruby 自己的 require 不一樣,import 并不是立即進(jìn)行導(dǎo)入的,而是在整個 Rakefile 執(zhí)行結(jié)束之后才全部導(dǎo)入,因此,可以在任意的地方寫 import ,而不用擔(dān)心依賴關(guān)系,需要共享的變量之類的只要在主 Rakefile 中定義了即可。

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

具體地來說,就是寫一個類,繼承自 Tasklib (雖然實(shí)際上只是約定而并不是必須的),然后在這個類的初始化函數(shù)里用 task 或者 file 來定義實(shí)際完成任務(wù)的子 task 即可。用一個實(shí)際的例子來說,比如說,我們可以定義一個 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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 通化县| 宣武区| 聂拉木县| 甘德县| 乐安县| 无锡市| 江城| 南京市| 克什克腾旗| 洛川县| 德惠市| 芷江| 泸水县| 浠水县| 西峡县| 喀喇沁旗| 和平区| 新沂市| 丁青县| 临邑县| 扬州市| 伊宁县| 安图县| 孝感市| 英吉沙县| 霍山县| 渝中区| 托里县| 中超| 南城县| 麦盖提县| 舞阳县| 炉霍县| 鄂州市| 横峰县| 南江县| 防城港市| 邵武市| 邵武市| 老河口市| 都匀市|