如何在 Haxe 中使用合并运算符?
How can I use coalescing operator in Haxe?
正如我在问题中提到的,
如何在 Haxe 中使用合并运算符?
使用这个插件:
然后,输入
var value = a || 'backup value';
而不是
var value = (a == null) ? 'backup value' : a;
Haxe 没有像 C# ??
那样的空合并运算符。
话虽如此,macros. It looks like somebody has already written a library 几年前就可以实现类似的功能。这是其自述文件中的示例:
var s = Sys.args()[0];
var path = s || '/default/path/to/../';
它使用现有的 ||
运算符,因为宏不能引入全新的语法。
但是,就我个人而言,我可能更喜欢这样的 static extension:
class StaticExtensions {
public static function or<T>(value:T, defaultValue:T):T {
return value == null ? defaultValue : value;
}
}
using StaticExtensions;
class Main {
static public function main() {
var foo:String = null;
trace(foo.or("bar")); // bar
}
}
除了自己制作之外,您还可以考虑使用 safety
library, which has a number of additional static extensions for Null<T>
和功能来处理 null
一般情况。
您也可以为此目的使用抽象而不是宏
class Test {
static function main() {
trace("Haxe is great!");
var s:Ory<String> = "hi!";
trace(s || "I don't get picked");
s = null;
trace(s || "I get picked");
trace(s + "!");
}
}
@:forward abstract Ory<T>(T) from T to T {
@:op(a||b) public inline function or(b:T):Ory<T> {
return this != null ? this : b;
}
}
正如我在问题中提到的,
如何在 Haxe 中使用合并运算符?
使用这个插件:
然后,输入
var value = a || 'backup value';
而不是
var value = (a == null) ? 'backup value' : a;
Haxe 没有像 C# ??
那样的空合并运算符。
话虽如此,macros. It looks like somebody has already written a library 几年前就可以实现类似的功能。这是其自述文件中的示例:
var s = Sys.args()[0];
var path = s || '/default/path/to/../';
它使用现有的 ||
运算符,因为宏不能引入全新的语法。
但是,就我个人而言,我可能更喜欢这样的 static extension:
class StaticExtensions {
public static function or<T>(value:T, defaultValue:T):T {
return value == null ? defaultValue : value;
}
}
using StaticExtensions;
class Main {
static public function main() {
var foo:String = null;
trace(foo.or("bar")); // bar
}
}
除了自己制作之外,您还可以考虑使用 safety
library, which has a number of additional static extensions for Null<T>
和功能来处理 null
一般情况。
您也可以为此目的使用抽象而不是宏
class Test {
static function main() {
trace("Haxe is great!");
var s:Ory<String> = "hi!";
trace(s || "I don't get picked");
s = null;
trace(s || "I get picked");
trace(s + "!");
}
}
@:forward abstract Ory<T>(T) from T to T {
@:op(a||b) public inline function or(b:T):Ory<T> {
return this != null ? this : b;
}
}