scala方法可以有多少实现?

时间:2018-03-17 16:40:02

标签: scala functional-programming

我是Scala的新手。我遇到了这个问题: 如果不考虑副作用(输出,全局变量......),下面的方法可以有多少实现?我怎么能弄明白呢?

def g[A,B,C](x: A,y: B,f:(A,B) => C): C

2 个答案:

答案 0 :(得分:0)

一般情况下,您可以从退货类型向后退一步,这样就可以查看C并尝试查找它的来源,我们可以看到f本身返回{ {1}},但它需要我们给它CA,所以现在我们寻找那些,我们只发现它们一次,这给了我们答案只有一种方法可以产生B,因此只有一种方法可以实现这个功能。如果我们有两个C值,我们会得到两个不同的实现。

现在当然这种情况忽略了你使用A或使用null强制转换的无数种方式实现它的事实。因此,如果你必须非常精确,那么这个函数就有1个实现。

答案 1 :(得分:0)

即使没有null s,asInstanceOf和抛出异常,这个问题也是不适定的。对于每个自然数n,您只需将.swap.swap附加到(x, y) n次 - 在以下实现中(n = 1的示例):

def g[A, B, C](x: A, y: B, f: (A, B) => C): C = {
  val (xx, yy) = (x,y).swap.swap
  f(xx, yy)
}

你可以通过在不同的地方插入任意多个identity函数来做同样的事情。或者使用_1_2投影和(-,-) - 构造函数(或者,一般情况下,重复应用非生产性的eta-expansions和beta-reduction of your choice)。