Darabonba
除了 API
以外,也提供了 Function
关键字用来定义普通的函数,它可以像 API
方法一样使用定义的模块属性,示例如下。
// 模块属性
type @operator = string
// 模块初始化函数
init(operator: string) {
@operator = operator;
}
function test(action: string): string {
return `${@operator} do ${action}`;
}
在上篇文章模块化中,我们提到过模块中可以定义静态方法,可以在直接通过模块包的引用来调用,通过 static function
定义的方法与模块中通过 function
定义的方法不同,它无法使用模块的属性,示例如下。
static function test(str: string): string {
return str;
}
在 Darabonba
中还提供了 async function 关键字定义异步方法,通过 async function
关键字定义的异步方法可以让 TypeScript
、C#
这样有异步方法语言的生成器根据该关键字生成对应的异步操作,例如在生成的 TypeScript
代码中的方法会带上 async
关键字,同时在调用对应的异步方法时也会同时加上 await
关键字,api
方法默认为异步方法。
static async function staticAsyncTest(str: string): string {
return str;
}
async function asyncTest(str: string): string {
return str;
}
在 Darabonba
中也提供了方法声明,跟 function
类似,只是方法声明不提供方法体。 Darabonba
作为描述性语言,无法实现一些复杂逻辑,所以需要通过方法声明、在各语言中生成 unimplement
的方法,开发者可以自行实现各语言逻辑从而提供更完善的功能,例如在 api
示例中的 Util
模块就是一个含有大量方法声明的模块,从而为 api
中的复杂逻辑实现提供可能。
/**
* This is a utility module
*/
static async function readAsJSON(stream: readable): any;
static function equalNumber(val1: number, val2: number): boolean;
static function assertAsMap(value: any): map[string]any;