스칼라 식별 기능이 있습니까?
내가 a List[Option[A]]
와 같은 것을 가지고 있고 이것을로 변환하고 싶다면 List[A]
표준 방법은 다음을 사용하는 것입니다 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)
이제는 o => o
단지 정체성 함수입니다. 할 수있는 방법이 있다고 생각했을 것입니다.
l.flatMap(Identity) //return a List[String]
그러나 .NET을 생성 할 수 없기 때문에이 작업을 수행 할 수 없습니다 object
. 나는 소용이없는 몇 가지를 시도했다. 이런 일을 할 사람이 있습니까?
l flatMap identity[Option[String]]
> List[String] = List(Hello, World)
for expresion이 더 좋습니다.
for(x <- l; y <- x) yield y
편집하다:
유형 매개 변수 (Option [String])가 필요한 이유를 파악하려고했습니다. 문제는 Option [T]에서 Iterable [T] 로의 유형 변환 인 것 같습니다.
식별 기능을 다음과 같이 정의하는 경우 :
l.flatMap( x => Option.option2Iterable(identity(x)))
유형 매개 변수는 생략 할 수 있습니다.
FWIW, Scala 2.8에서는 그냥 호출 flatten
하면됩니다. Thomas 는 대부분 Scala 2.7에서 다루었습니다. 그는 그 신원을 사용하는 한 가지 대안을 놓쳤습니다.
l.flatMap[String](identity)
그러나 연산자 표기법에서는 작동하지 않습니다 (연산자 표기법은 유형 매개 변수를 허용하지 않는 것 같습니다. 이는 알아두면 좋습니다).
스칼라 2.7 ( 적어도에서)을 호출 할 수도 있지만 유형 없이는 아무것도 할 수 없습니다. 그러나 이것은 작동합니다.flatten
List
l.flatten[String]
타입 추론 자에게 약간의 도움을 줄 수 있습니다.
scala> val l = List(Some("Hello"), None, Some("World"))
l: List[Option[java.lang.String]] = List(Some(Hello), None, Some(World))
scala> l.flatten[String]
res0: List[String] = List(Hello, World)
참고 URL : https://stackoverflow.com/questions/1797502/is-there-a-scala-identity-function
'developer tip' 카테고리의 다른 글
Python 목록의 기본 데이터 구조는 무엇입니까? (0) | 2020.11.21 |
---|---|
디버그 모드에없는 릴리스 버전의 버그에 대한 일반적인 이유 (0) | 2020.11.21 |
람다 함수를 사용하는 이유는 무엇입니까? (0) | 2020.11.21 |
CFLAGS, CCFLAGS, CXXFLAGS-이 변수가 정확히 무엇을 제어합니까? (0) | 2020.11.21 |
스콜 렘은 무엇입니까? (0) | 2020.11.21 |