【问题标题】:Pre-apply parameter to unityscript function and use that as an object to send into another function将参数预先应用到 unityscript 函数并将其用作发送到另一个函数的对象
【发布时间】:2013-06-11 01:06:36
【问题描述】:

我有一个复杂的功能。我打算向它发送一个函数。

function ComplexFunction( customFunction : function)
{
    //Complex things
    customFunction();
    //Complex things
}

但是我打算发送的函数有不同的签名

function FunctionA ( enumParameter : EnumX )
function FunctionB ( enumParameter : EnumY )
function FunctionC ( enumParameter : EnumZ )

所以这不是一个选项,因为我不知道将发送什么类型。

function ComplexFunction( customFunction : function , enumForCustomFunction : Enum??? )

(这是Unity的带有#pragma strict的unityscript,所以必须注明参数类型。)

所以我考虑预先应用那些枚举参数,使其成为无参数函数并将其发送给ComplexFunction 调用。这可能吗?

【问题讨论】:

  • 从未使用过Unity3d,但你不能用一个未命名的函数包装真正的函数来调用吗? (例如ComplexFunction(function () { return FunctionA(EnumX); });
  • 我的回复是否回答了您的问题?如果是,请接受。
  • 感谢提醒!我有点忙:(

标签: unity3d arguments parameter-passing unityscript


【解决方案1】:

在纯 JavaScript 中,您可以像这样将参数绑定到函数:

var multiply = function(x,y) { return x*y };
var doubleIt = multiply.bind(null, 2);

所以调用doubleIt(3) 现在返回6。 (null 设置函数的上下文,在这种情况下我们不关心它,所以我们使用null)。您可以在此处阅读有关此主题的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind


在你的情况下,我会像这样用FunctionA 打电话给ComplexFunction

ComplexFunction(FunctionA.bind(null, AValueFromEnumX));

【讨论】:

  • 这就是我们所说的“部分申请”?我刚刚读到它。 :P
  • 是的,这是部分应用。函数doubleIt 被“部分应用”。如果您对 Haskell 有一点了解,这也称为“咖喱”(不完全一样,但差不多)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多