puerts icon indicating copy to clipboard operation
puerts copied to clipboard

[Unity] 函数参数检查过于严格?

Open bluedoom opened this issue 4 years ago • 4 comments

detail | 详细描述

function Foo(){
    return 1;
}

let K:(a:number)=>void = Foo;
K(1);

上面代码可以正常运行,但是如果将Foo换成C#实现,就会报 invalid arguments to Foo

bluedoom avatar Jan 11 '22 02:01 bluedoom

这个是因为JS比c#松散吧,JS允许实参形参数目不同,c#不允许,自然报invalid arguments

zombieyang avatar Jan 11 '22 03:01 zombieyang

我意思是多出来的参数其实可以忽略,不用检查那么严格

bluedoom avatar Jan 11 '22 05:01 bluedoom

有什么情况会不得不需要puerts层面忽略多余参数?我总觉得既然是调c#那就应该按c#的严格程度来

zombieyang avatar Jan 11 '22 11:01 zombieyang

我遇到的一个情况是,C#函数当做参数传递,TS编译器允许这种操作,能够正常编译,这时候容易忽略这种传参的严格性。

function SetCallback(callback:(a:number)=>void)
{
  callback(123);
}
//void ACSharpFunc() { ... }
SetCallback(ACSharpFunc);

bluedoom avatar Jan 11 '22 11:01 bluedoom