【问题标题】:Using functions within conditionals在条件中使用函数
【发布时间】:2017-02-10 08:04:45
【问题描述】:

我一直在做 Project Euler 的原因。有一次,我发现自己想将一个值与一个函数的结果进行比较。从那以后我选择了一个不同的解决方案,但这让我很好奇。这将如何工作?如果我要这样做:

//javascript
if x == mathyFunction(10){
  //do this
}

function mathyFunction(y){
  if(y>0){
    mathyFunction(y-1);
    return y;
  } else {
    return y;
  }
}

我知道这不是尾递归或任何花哨的东西,我主要只是好奇这背后的逻辑是如何运作的。

计算机将如何解释它?如果任何一个值== x,它会返回true,还是仅在所有值== x 时才返回true。实验让我猜测,但我会继续挖掘。

【问题讨论】:

  • 从您的代码中,我看到 mathyFunction 将 10 的值降至零并始终返回 0。然后将其与 x 进行比较,如果 x 不为 0,则为 false。
  • @nocturns2 不是返回 0,而是返回 y
  • 你是对的。我指的是 y 的值,这就是您要与 x 的值进行比较的值。
  • @nocturns2 x 与 10 进行比较,因为这是为 y 传递的值。
  • 老实说,我不确定您的代码是否能正常工作。应该是mathyFunction(y){ return y>0? mathyFunction(--y) : y }

标签: javascript function conditional


【解决方案1】:

您没有指定您询问的是哪种语言,但假设return 语句的通常语义,一个函数不能多次返回。因此,如果通过“单独返回所有值”,您的意思是这样的:

function f() {
  return 1;
  return 2;
  ...
}

那么第一个return 之后的所有内容都只是死代码,就像return 1 是其中唯一的return 语句一样。函数调用只有一个值,该值就是您要与之比较的值。

如果您的意思是mathyFunction 返回一个列表或其他集合对象,其中包含xy 之间的值,那么x 将与该列表进行比较。同样,语义将取决于语言,但在大多数语言中,将数字与列表进行比较要么是类型错误,要么只是 false

如果通过单独返回值,您指的是 yield 语句(如 C# 的 yield return 或 Python 的 yield),那么函数的结果将是某种迭代器对象,并且与上一段适用。

【讨论】:

  • 抱歉,我应该更具体一些。它是 JavaScript。 mathyFunction 后面的代码是递归的,所以它递归然后返回一个值。我稍微修改了示例以反映这一点,为了简单起见,我将mathyFunction(x,y) 更改为mathyFunction(x)
  • @Ucenna 您编辑的问题中的功能是身份功能。在if 的这两种情况下,您所做的只是返回y。在那种情况下,您还递归地调用该函数,但是由于您不对递归调用的结果做任何事情,所以这不会做任何事情(除非使代码花费更长的时间,除非 JavaScript 引擎设法优化该调用) .再次重申:函数调用不能多次返回 - 递归不会改变这一点。
  • 好吧,好吧!我正在努力得出这个结论。你所说的与我的结果完全一致。
猜你喜欢
  • 1970-01-01
  • 2021-01-28
  • 2017-08-05
  • 1970-01-01
  • 1970-01-01
  • 2019-02-19
  • 1970-01-01
  • 2013-06-29
  • 1970-01-01
相关资源
最近更新 更多