有没有scala身份识别功能? [英] Is there a scala identity function?

查看:117
本文介绍了有没有scala身份识别功能?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我有类似于 List [Option [A]] 的东西,我想将它转换为 List [A] ,标准方式是使用 flatMap

 阶> val l = List(Some(Hello),None,Some(World))
l:List [Option [java.lang.String]] = List(Some(Hello),None,Some ))

scala> l.flatMap(o => o)
res0:List [java.lang.String] = List(Hello,World)

现在 o => o 只是一个身份识别功能。我会认为有一些方法可以做到:
$ b $ pre $ l.flatMap(Identity)//返回一个List [String ]

然而,我不能得到这个工作,因为你不能基因化对象。我尝试了几件事情无济于事。有没有人有这样的工作?

解决方案

有一个身份中的 =noreferrer>功能。

  l flatMap identity [Option [String]] 

> List [String] = List(Hello,World)

A expresion更好,我想: (x <-1; y <-x)产生y

编辑:



我试图弄清楚为什么类型参数(选项[字符串])是必需的。问题似乎是从Option [T]到Iterable [T]的类型转换。



如果您将身份函数定义为:

  l.flatMap(x => Option.option2Iterable(identity(x)))

类型参数可以省略。


If I have something like a List[Option[A]] and I want to convert this into a List[A], the standard way is to use flatMap:

scala> val l = List(Some("Hello"), None, Some("World"))
l: List[Option[java.lang.String]] = List(Some(Hello), None, Some(World))

scala> l.flatMap( o => o)
res0: List[java.lang.String] = List(Hello, World)

Now o => o is just an identity function. I would have thought there'd be some way to do:

l.flatMap(Identity) //return a List[String]

However, I can't get this to work as you can't generify an object. I tried a few things to no avail; has anyone got something like this to work?

解决方案

There's an identity function in Predef.

l flatMap identity[Option[String]]

> List[String] = List(Hello, World)

A for expresion is nicer, I suppose:

for(x <- l; y <- x) yield y

Edit:

I tried to figure out why the the type parameter (Option[String]) is needed. The problem seems to be the type conversion from Option[T] to Iterable[T].

If you define the identity function as:

l.flatMap( x => Option.option2Iterable(identity(x)))

the type parameter can be omitted.

这篇关于有没有scala身份识别功能?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆