如何制作功能 lambda 通用B. Scala?

像大多数大多数可能知道的,你可以用两种方式定义函数 scala, 有一种方法 'def' 和方法 lambda...

制作 'def' 通用品种非常直接


def someFunc[T]/a: T/ { // insert body here


我有哪些问题,所以它是如何完成以下的总数:


val someFunc = /a: Int/ => // insert body here


当然,现在A是一个整数,但我需要做什么来使它成为普遍的?


val someFunc[T] = /a: T/ =>

不起作用
val someFunc = [T]/a: T/ =>


完全是可以使它们普遍存在,或者我应该坚持下去 'def'?
已邀请:

君笑尘

赞同来自:

正如Randall Schulz所说,
def

创建不是函数,而是方法。 但是,它可以返回一个函数,因此您可以创建通用函数,例如函数
identity


Predef

. 它看起来像这样:


def myId[A] = /a: A/ => a

List/1,2,3/ map myId
// List/1,2,3/

List/"foo"/ map myId
// List/"foo"/


但请记住挑战
myId

没有关于类型显示的任何信息
Nothing

. 在上面的情况下,它有效,因为类型输出使用签名
map

, 这是
map[B]/f: A => B/

, 在哪里
A

-lip列表 , 和
B

显示就像
A

, 因为这个签名
myId

.

裸奔

赞同来自:

我不相信这是可能的。 您可以查看此前的帖子以获取更多信息:

https://coderoad.ru/2554531/
逃离它的唯一方法 /其中一个答案如何提及/ - 展开类似的东西 FunctionX 并在类级别使用通用,然后在重新定义功能中使用它
apply

.

董宝中

赞同来自:

我也不相信这是可能的,但我是一个悲观主义者。

http://www.chuusai.com/2012/04 ... es-1/
/

编辑:

告诉我,如果这不是你询问的,那就是为什么答案不是我想你问的原因,看看链接:


scala> :pa
// Entering paste mode /ctrl-D to finish/

def myId[A] = /a: A/ => a

List/1,2,3/ map myId
// List/1,2,3/

List/"foo"/ map myId
// List/"foo"/

// Exiting paste mode, now interpreting.

myId: [A]=> A => A
res0: List[String] = List/foo/

scala> val f1 = myId[Int]
f1: Int => Int = <function1>

scala&gt; val f2 = myId[String]
f2: String =&gt; String = <function1>

scala&gt; List/1,2,3/ map f2
<console>:10: error: type mismatch;
found : String =&gt; String
required: Int =&gt; ?
List/1,2,3/ map f2
^

scala&gt; List/"foo"/ map f1
<console>:10: error: type mismatch;
found : Int =&gt; Int
required: String =&gt; ?
List/"foo"/ map f1
^


功能的值不是多态性的t。 e。
</console></console></function1></function1>

三叔

赞同来自:

我相信最接近的多态性功能:

https://github.com/milessabin/ ... alues

要回复问题请先登录注册