【问题标题】:How to call functions inside ternary operators in UnityScript?如何在 UnityScript 中调用三元运算符中的函数?
【发布时间】:2013-12-16 07:05:40
【问题描述】:

我正在尝试根据布尔值决定调用哪个函数。

myBooleanVariable ? function1() : function2();

Unity 报错:

语句中的表达式只能针对它们的 副作用。

那么为什么这不起作用,我怎样才能使它起作用?

感谢您的帮助!

【问题讨论】:

  • 某事告诉我你在错误信息中留下了一个重要的字眼("...must not be...") .
  • 它对我有用,你能提供更多细节吗?
  • 你的函数有返回任何东西吗?
  • @Asterisk:你在使用 UnityScript 吗? (Unity对JavaScript的实现)
  • @CengizFrostclaw:side-effect 是一个不是其返回值的函数的结果。您正在使用条件运算符来调用两个函数之一,并且它在抱怨(我 认为),因为尽管您正在使用运算符(在表达式中),但您并没有对返回值,因此仅使用它来获得副作用。 表达式 是可以用作右侧值的东西(赋值的右侧,传递给函数等); statement 很难简洁地定义。 :-)

标签: unity3d ternary-operator unityscript side-effects


【解决方案1】:

那么为什么这不起作用,我怎样才能使它起作用?

如果它确实不起作用(我手头没有 Unity),则意味着 UnityScript(Unity 的 JavaScript 实现)不支持 expression statement。这使它与规范不一致,并且意味着相当多的 JavaScript 习惯用法在其中不起作用。您的行是完全有效的 JavaScript/ECMAScript。您可以检查是否有“lint”样式的选项可以启用/禁用。

解决方案是使用表达式的结果,或者使用if 重写它。

使用结果:

var f = myBooleanVariable ? function1() : function2();

使用if

if (myBooleanVariable) {
    function1();
}
else {
    function2();
}

或者,如果您真的希望 if 位于一行:

if (myBooleanVariable) function1(); else function2();

【讨论】:

  • 是的,我做了你的最后一行。我只是想知道我是否跳过了有关三元运算符的内容。谢谢!
  • @CengizFrostclaw:你不是真正的 JavaScript,不;您的“三元”行(更准确地说是“conditional expression”行)在真正的 JavaScript 中工作得很好。
  • 好吧,我会责怪 Unity :) 再次感谢! 1 分钟内接受。
  • 它也可能是一个(理智的)样式控件,然后可能可以在某个地方进行配置(从未尝试过 Unity,所以纯属猜测)。
  • @JanDvorak 一些 IDE 和东西可以让您定义哪些问题应该呈现为警告或错误。我个人不喜欢警告,它们会累积。代码应该是对还是错。
猜你喜欢
  • 2021-09-30
  • 2018-12-04
  • 2016-11-21
  • 1970-01-01
  • 2022-11-03
  • 2023-01-20
  • 2017-11-12
  • 1970-01-01
  • 2018-04-03
相关资源
最近更新 更多