貌似TS本身是不支持输出参数的。
看了一圈就是返回数组或对象什么的思路,感觉这种方法不是很优雅。
没有很明白你的意思,你是要在 ts 文件里输出函数?可以使用 export function xxx(){}
什么语言转过来的?输出参数这种设计个人感觉没什么卵用
你参数里传的是object,就是对object的引用,在函数内部的修改就能传出去。。算是变相的实现一样的功能。
js能随便返回对象,你可以把要修改的当做值返回,如果有多个值,就放到对象返回。不需要输出参数。
嗯,之前我写C#的,整体来说TS和C#思路很像。毕竟是同一个大牛弄的。不过很多特性还是有差距,可能还在不断完善吧。
如多个返回参数就是一个例子。在写代码时,如果碰到要返回多个值的就很麻烦,当然可以返回数组或者对象来解决这个问题,但总体感觉还是实现不够优雅。看到官方的代码也是实现了out参数的,甚至有多个。竟然官方都这么做肯定有他的道理之处。
比如,官方的这个:
Quat.getEulerAngles(out: Vec3):Vec3
这个out参数就是一个输出参数,这种实现方式就很优雅,一个是明确声明函数调用结构、类型和返回值情况,另外也很灵活。不需要每次要放回多个值时,还需要定义一大堆对象。
不过根据gameMaster的回复,可能目前官方实现的都是传入object的,才有效吧。 了解了,感谢。
官方写的 getEulerAngles(out:Vec3):Vec3 中 out 概念上和C#的out相似 (传入引用然后初始化),区别还是很大的。简单来说:
C#的 out 是 传入变量地址,对变量地址的值初始化,变量地址不变 (可以用new 初始化,引用保留)。
TS 只是 传入一个对象,把它初始化。(不能用 new 初始化,引用会被覆盖)
所以C#里不用out,也可以像 TS一样的写,只是C# 中 Vector3 是 结构体,属于值类型,只能用 out 参数 实现这种功能。而TS 并没有结构体的区分,所以普通的实现就行了。
总之,动态语言就用动态语言方式解决吧。
有多个返回值怎么才不麻烦 ES6解构赋值
function a(){
return {name:'a', age:18}
}
function b(){
return ['b',20];
}
var {name, age} = a();
var {name:aName, age:aAge} = a();
var [bName, bAge] = b();
对的,你说的引用方式,就是C#里的 ref参数方式。也就是说C#如果传入一个对象,在函数体内部默认它是实例化一个对象出来的,这样对于外部是安全的。但如果要使用引用方式,必须强制用ref来声明。
而TS则不同,它默认传入对象就是使用引用方式。
总体来说TS的严谨性会差很多,有得有失。