什么时候以及为什么取消功能

有限差异

考虑以下代码:

def f1(a: Int, b: Int) = a + b

def f2(a: Option[Int], b: Option[Int]): Int = (a, b) match {
  case (Some(x), Some(y)) => x + y
  case _ => throw new IllegalArgumentException
}

println(f1(10, 20))
println(f2(Some(10), Some(20)))

听说您可以将f1提升为f2。作为初学者,我有以下问题:

什么是举重,为什么要使用?在实现方面,我如何“解除” f1?

非常感谢任何解释,因为很难找到为什么我会“举起”某物

阿列克谢·罗曼诺夫(Alexey Romanov)

原因:当您有一个带有签名的函数,f1并且想要在Option[Int]s(或List[Int]s等)上“调用”它时

方法:您可以直接编写:

def lift2option[A, B, C](f: (A, B) => C): (Option[A], Option[B]) => Option[C] = ???

我没有定义它,因为您应该尝试自己编写它。您对的定义f2应该是一个很好的起点。请注意,我让它返回Option[Int]而不是Int以后,我可以根据需要编辑并给出答案。

然后执行以下操作,而不是将其定义f2为单独的函数:

val f2 = lift2option(f1 _)
println(f2(Some(10), Some(20)))

当然,关键是现在对于具有签名的任何函数,例如f1您都可以获得f2等效的函数

可以将其进一步推广为不仅适用于Option,而且以后还要研究它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

什么时候以及为什么类型对象比字典更好?

什么时候以及为什么在constexpr中使用static?

什么时候以及为什么应该使用域服务?

Python什么时候以及为什么忽略__slots__?

什么时候以及为什么使用next_by_code()?

.innerHTML与.value ...什么时候以及为什么?

什么时候使用“ with”功能,为什么好呢?

具有const和不具有const的相同功能-什么时候以及为什么?

什么时候使用(装饰)什么以及为什么-DefaultErpHttpDestination,DefaultHttpDestination?

什么时候以及如何取消Android中对ListView Item的网络请求?

枚举:为什么?什么时候?

PHP什么时候以及为什么需要调用store_result()?

什么时候以及为什么数据库连接昂贵?

什么时候以及为什么使用tf.reduce_mean?

什么时候以及为什么需要重新导入所有Maven项目?

什么时候,在哪里以及为什么我应该对控制结构使用“替代语法”?

什么时候以及为什么需要Spring应用程序的jboss-deployment-structure.xml?

什么时候,为什么以及如何在Python中调用thread.join()?

在Javascript中,什么时候以及为什么数字乘以NaN,然后求值?

什么时候以及为什么要在JavaScript中“返回假”?

什么时候以及为什么要使用-fno-elide-constructors?

什么时候以及为什么我应该使用namedtuple而不是字典?

什么时候以及为什么使用#define macro(x)代替函数?

什么时候以及为什么要在node.js中使用assert?

参数包必须位于参数列表的末尾...什么时候以及为什么?

什么时候以及为什么在C#中使用别名或类名?

什么时候以及为什么要使用没有数据成员的类?

什么时候以及为什么需要在C ++中使用cin.ignore()?

什么时候以及为什么我应该使用session_regenerate_id()?