多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
可选参数通过在参数标识符前面前置一个问号 `?` 来声明: ~~~ class Main { static public function main() { // ?i : Int -> ?s : String -> String $type(test); trace(test()); // i: null, s: null trace(test(1)); // i: 1, s: null trace(test(1, "foo")); // i: 1, s: foo trace(test("foo")); // i: null, s: foo } static function test(?i:Int, ?s:String) { return "i: " +i + ", s: " +s; } } ~~~ 函数 `test` 有两个可选参数:Int 类型的 `i` 和 String 类型的 `s` 。这在第3行的函数类型输出直接反映出来。这个例子程序调用了4次 `test` ,并打印出它的返回值: * 第一次调用不带任何参数 * 第二次调用带有一个单独的参数 `1` * 第三次调用带了两个参数 `1` 和 "`foo`" * 第四次调用只有单独的参数 “`foo`” 输出内容显示,函数调用中被省略的可选参数的值为 `null` 。这意味着这些参数的类型必须认可 `null` 作为值,这是在 [为空性(第2.2节)](http://#) 中讨论的问题。 当编译到一个 [静态语言目标(第2.2节)](http://#) 时,Haxe 编译器通过推断它们的类型为 `Null<T>` 确保可选的基本类型的参数是可空的。前三个调用非常直观,第四个可能是一个惊喜:如果提供的值可以分配到一个之后的参数,确实允许跳过可选参数。