在HAXE
回答
Haxe没有其他参数,主要是因为这些参数本质上是无类型的,而且语言应该有助于输入最安全的代码。类型代码可以被编译器检查并优化。编译时错误更多,运行时错误更少。
仍然可以通过几种方式以某种方式实现休息参数的相同结果,具体取决于您要查找的内容;函数只接收值还是对象?
使用Any
型和Reflect
最直接的方法:
function loop(props:Any)
{
for (prop in Reflect.fields(props))
{
trace(prop, Reflect.field(props, prop));
}
}
// usage:
loop({name: "Jerson", age: 31});
你可以只使用与值的数组,因此你还需要,当你用它来使用数组:
static function loop(values:Array<Any>)
{
for (i in 0...values.length)
{
trace(i, values[i]);
}
}
//usage:
loop(["Jerson", 31]);
如果你在实现中不喜欢这个数组,你也可以使用这个我不会建议的随机函数,但只是为了给出一个想法。
function loop<A,B,C,D,E,F>(?prop1:A, ?prop2:B, ?prop3:C, ?prop4:D, ?prop5:E, ?prop6:F)
{
var props:Array<Any> = [prop1,prop2,prop3,prop4,prop5,prop6];
for (i in 0...props.length)
{
trace(i, props[i]);
}
}
// usage:
loop3("Jerson", 31);
这里试试这些例子:https://try.haxe.org/#Be3b7
也有macros for rest arguments,如果你熟悉宏这可能是好的。请注意,这将在编译时跟踪,并且此时不会在输出源中生成跟踪。
import haxe.macro.Expr;
macro static function loop(e1:Expr, props:Array<Expr>)
{
for (e in props)
{
trace(e);
}
return macro null;
}
// Usage:
loop("foo", a, b, c);
当然,最好的建议就是不要为了保持类型安全而动态,但这会让你继续前进。
谢谢你的回答!阵列解决方案可以帮助我。我正在实现一个键盘输入管理器,我需要执行如下操作: 'Keyboard.bind(“jump”,Key.UP,Key.W);' 只是为了更好的阅读。但写作: 'Keyboard.bind(“jump”,[Key.UP,Key.W]);' 是最接近它的方式。 –
我肯定会在这种情况下使用一个数组。数组已经有一个API和工具来处理它们。 – 5Mixer
@JersonLaTorre我可能会使用这个宏。 –
如果你真的需要,有一种方法:Reflect.makeVarArgs
。这是非常无类型的,所以我建议你首先考虑使用类型化的替代。
就我个人而言,我可能只会将它用于调试或者出于某种其他原因已经无类型化的代码。
实施例:
static function _foo(args:Array<Dynamic>)
{
return "Called with: " + args.join(", ");
}
static var foo:Dynamic = Reflect.makeVarArgs(_foo);
[...]
trace(foo(1));
trace(foo(1, 2));
trace(foo(1, 3, 3));
对于其余参数遵循相同类型的情况,'makeVarArgs'的通用版本会很好。即,如果'_foo'只接受一个'Int'数组。 – FullOfCaffeine
- 1. Haxe后端在Haxe?
- 2. 在HAXE
- 3. 在HAXE
- 4. 在HAXE
- 5. HAXE,在运行时
- 6. WebSockets + Haxe?
- 7. 动态投射在Haxe
- 8. Neko Dll在Haxe C++目标
- 9. Haxe/php Array.length
- 10. Haxe的代表
- 11. Haxe和Windows API
- 12. 读线HAXE
- 13. Haxe,ListSort.sort()问题
- 14. ActionScript to Haxe
- 15. Haxe使用@:classCode
- 16. Haxe Int to String
- 17. Haxe有JSFiddle吗?
- 18. Haxe入门
- 19. haXe的:从haxe.macro.Position
- 20. 如何开始Haxe?
- 21. Eclipse的调试Haxe
- 22. Starling,Nape,Flash,Haxe Dillemma
- 23. 用haxe nme拖拽
- 24. tink_core Future(haxe)form C++
- 25. vscode launch.json react-native&Haxe
- 26. 调试Haxe(ActionScript 3)
- 27. Haxe IE9 xmlHTTPrequest问题
- 28. Haxe - 生成exe(cpp)
- 29. 如何获得haXe的命令后面安装HAXE 3
- 30. 在Haxe中使用RSA实现
不能在一个数组传递或对象?按照您指定的方式,输入安全性和东西将会丢失。 – 5Mixer
是啊!我认为这是最接近和最简单的方法。 –