Virtools指令碼語言 VSL 教程 函式

2021-05-04 09:53:51 字數 1697 閱讀 1871

函式定義語法

函式定義確立了函式的名稱、它的返回值型別、它的形參的型別和數量、及函式主題。

returntype functionname ( [paramlist ] )

paramlist :

parameter , ...

parameter :

type parametername

例項:

int square(int i)

函式引數

引數是函式期望接收到的值。在函式原型中,函式名後面跟著的括號裡包含了函式引數與其型別的完整列表。引數宣告指定了引數中儲存的值的型別、大小及識別符號。

在宣告引數時,你可以指定預設值。

void makeaction(int actionnumber, bool loginconsole = false)

}void main()

你也可以宣告不帶引數的函式。

float pi()

函式返回值

函式的返回值型別確立了函式返回值的大小和型別。

這裡是乙份所有型別說明符的清單:

你可以宣告不帶返回值型別的函式。這種情況下,你得用"void"作型別名。

void print(string s, int line)

函式過載

vsl允許宣告多個同名函式。這些函式叫做被過載的函式。過載函式讓程式設計師能根據引數的型別和數量對某個函式補充不同的語義。

例項:

int add(int a, int b) // add two int

float add(float a, float b) // add two float

void main()

在你過載函式時,由vsl編譯器選擇所匹配的函式。某些情況下,你會處在一種模稜兩可的境地,因為編譯器不知道選哪個函式。

void main()

這個函式的呼叫就是模稜兩可的,因為所有函式都可用:

10.0 可以被計算成整數或5可以被計算成浮點數。

在乙個vsl指令碼中,你可以呼叫當前指令碼中定義的任何vsl函式、全域性指令碼中的函式或任何限定的c/c++函式。定義函式並不是執行它。定義函式是對該函式簡單命名及指定當函式被呼叫時做什麼。對函式進行呼叫實際上就是執行那些指定的行為。

遞迴函式甚至可以被遞迴。即它可以呼叫它自己。例如,這裡有乙個計算fibonacci數的函式:

int fibo(int n)

void main()

給vsl函式傳遞引數

vsl中所有基本型別(bool, char, int, float, str) 通過值來傳遞。值傳遞給函式,但如果該函式改變了該引數的值,此改變不會對全域性或呼叫函式中產生影響。

void foo(int a)

void main()

vsl結構與c/c++結構/類由引用來傳遞。如果函式修改了所引用的引數,它也修改了那個原始的。

void changevector(vector v)

void main()

給c/c++函式傳遞引數

在呼叫c/c++函式時,遵守c/c++中函式宣告規則。vsl中不支援常量引數,但可以使用c/c++常數函式及使用帶常量引數的c/c++函式。既然const關鍵字為被實現,你必須在使用帶常量引數的c/c++函式時謹慎一些。

Virtools指令碼語言 VSL 教程 列舉

enum關鍵字指定了乙個列舉型別。列舉型別是一種使用者定義的型別,由一套叫做計數器 enumerator 的賦之以名稱的常量組成。預設情況下,第乙個計數器有乙個為0的值,每個後續的計數器都比前乙個的值更大 除非你顯示地為特定計數器指定乙個值 定義語法 enum enumname enummember...

Virtools指令碼語言 VSL 教程 函式

函式定義語法 函式定義確立了函式的名稱 它的返回值型別 它的形參的型別和數量 及函式主題。returntype functionname paramlist paramlist parameter parameter type parametername 例項 int square int i 函式...

Virtools指令碼語言 VSL 教程 列舉

enum關鍵字指定了乙個列舉型別。列舉型別是一種使用者定義的型別,由一套叫做計數器 enumerator 的賦之以名稱的常量組成。預設情況下,第乙個計數器有乙個為0的值,每個後續的計數器都比前乙個的值更大 除非你顯示地為特定計數器指定乙個值 定義語法 enum enumname enummember...