Swift GYB 簡易教程

2021-09-19 09:41:25 字數 1479 閱讀 6521

作為乙個勤奮的荷蘭豬(校對注:原文 guinea-pig,也可譯為豚鼠)(據我所知,目前唯一使用 gyb 的專案是 swift-jni,該專案是安卓的 swift 移植專案的一部分)我在乙個用於簡化 swift 位運算的庫 bitter 中廣泛使用了 gyb,在這個庫里我寫了很多相似的**來擴充套件固定長度的 swift 整型變數。

有了這個工具,我就不需要手工輸入所有**。我只需定義乙個模板,就可以用 gyb 工具建立十個擴充套件。

讓我們來看看如何使用 gyb。

使用 gyb 模板引擎相當簡單,但是需要一點 python 知識。模板是由這些元素組成:

讓我們用這幾個簡單的規則來做乙個例子,拿 bitter 的模板 來說,用allone為所有固定長度的整形變數新增乙個計算屬性,就會返回乙個由帶有allone的位模式初始化後得到的整型變數/無符號整形變數:

%%

% for inttype in inttypes:

% for sign in ['','u']:

/// extension that adds a few additional functionalities to $int$

extension

$int$ int$ with all ones

%if sign == '':

public static var allones:int$(bitpattern: uint$.max)}

%else:

public static var allones:uint$.max}

%end

} %end

%end

有了 python **塊,我們就可以在 swift 中建立乙個固定長度整型陣列,然後遍歷它並使用內部迴圈來處理有符號和無符號整數。然後,我們可以根據符號變數的值輸出兩個不同的**片段。如果標識變數為空(有符號整數)就輸出第乙個**段,如果不為空(無符號整數),就輸出第二個**段。

在這個例子中,我們用到了簡單的 if/else 語句和 foreach 語句,我們也可以使用一切在 python 中合法的語句,比如 elif 或者 for 的變體。

執行 gyb,會得到 8 個擴充套件,對應到每乙個固定長度整型變數,範圍從 int8/uint8 到 int64/uint64。

chmod +x gyb

通過如下方式解析模板:

bash

./gyb --line-directive '' -o ../sources/bitter/bitter.swift bitter.swift.gyb

-o選項指定輸出檔案,最後乙個檔名指定包含模板的檔案的名稱。

若 --line-directive ''引數為預設,gyb 輸出會增加除錯資訊,在原始模板中每一部分的輸出描述元素會被執行。

當你在除錯自己寫的模板時,除錯資訊會很有用。一旦模板完成之後,可以禁用除錯的注釋,讓輸出清爽一些。

Vi 簡易教程

vi file1 file2 此時,您會發現您面對如下視窗 圖 4.4.vim 開始 您現在是在開啟的第乙個檔案的最前面,並處於 命令模式 在此模式下,您不能往檔案中插入文字。要插入文字,您需要先切換到 插入模式 以下是一些插入文字的快捷方式 在插入模式中,您會在螢幕底部看到 插入 字串 提示您所處...

Vim簡易教程

vim時linux內建的一款可定製的文字編輯器,使用者可以根據自己的需求對其進行功能的補充。要對文字內容進行編輯,需要按下 i,i,o,o,a,a,r,r 這些鍵中的任意乙個,此時vi編輯器將處於編輯狀態,使用者便可對文字進行需要的修改。下面對這個開啟編輯模式的鍵進行簡單的介紹 命令含義 i進入編輯...

svn簡易教程

主要以debian linux 為例,使用以下命令安裝svn tl debian sudo apt get install subversion 安裝完成後,檢視安裝的svn版本 tl debian svn version tl debian mkdir svn tl debian svnadmin...