有时 Craft Tweaker 本身以及它的附属提供的函数根本不够用。 接下来我们将会讲解如何构建自定义函数! 你甚至可以在函数中嵌套函数

一般来说,你可以这样声明一个静态函数:

ZenScript
Copy
function NAME ([arguments[as type]]) [as returnType]{
    [Statements]
    [return VALUE;]
}
//NAME 函数名称
//arguments 传入参数名称
//type 传入参数的数据类型
//returnType 返回值的数据类型
//VALUE 返回的值

是否添加方括号中的内容取决于你的目的。 让我们仔细看看具体的函数。

静态函数在运行脚本之前创建,并可以在脚本中的任何位置访问。
你甚至可以使用跨脚本调用访问在脚本之外声明的函数。

无返回值函数

Link to 无返回值函数

无返回值函数是不会返回任何值的函数。

ZenScript
Copy
//调用tens() 函数,但不传入任何参数
tens();

//调用函数 realTens(),并传入字符串参数“Hello World!”
realTens("Hello World!");


//创建函数 tens(),它不要求传入任何参数
function tens(){
	//调用函数 realTens(),同时传入参数 "" 
	realTens("");
}


//创建函数 realTens(),它要求传入一个字符串作为参数
function realTens(a as string){
	//将这个参数打印 10 次
	for i in 1 to 11{
		print(a);
	}
}

有返回值函数

Link to 有返回值函数

你也可以指定一个函数的返回一个值。 这里建议使用 as 关键字来定义返回类型。

ZenScript
Copy
//调用 add 函数,并传入参数 1 和 99 
val result = add(1,99);
print(result);

//你可以直接在 print 函数中调用 add 函数
print(add(2,64));

//定义一个函数 add(),它需要传入两个参数: a 和 b(必须设定为整型!),并将返回值设为整型
function add(a as int,b as int) as int{
	//返回 a 与 b 的和
	return a+b;
}

可以设置一些参数默认值。 当调用函数时,这些参数可以被忽略并使用默认值。

ZenScript
Copy
function name(a as int, b as int = 2, c as int = 3) as void {
    print(a + b + c);
}

name(1); // 输出 6 [1 + 2(默认值)+ 3(默认值)] 
name(1, 3); // 输出 7 [1 + 3 + 3(默认值)] 
name(1, 1, 4); // 输出 6 [1 + 1 + 4] 
  • 可以使用尖括号引用并作为默认参数的函数。 但不允许变量。
  • 当一个参数有默认参数时,它后面的参数也需要默认参数。

作为参数的函数

Link to 作为参数的函数

你还可以使用函数作为参数。 在这种情况下,它们在单独的一个类中被创建。 除此之外和普通的静态函数一模一样,你可以直接使用它们的变量名来调用它们。
你甚至可以把它们设定为全局变量

如果你想要创建一个函数作参数(并且还是全局参数)的函数,你可以这么做:

Copy
global addition as function(int, int)int = function (a as int, b as int) as int {
    return a + b;
};

print(addition(1,2));