에 대한 변환 함수 :스칼라는, 범용 나는 다음과 같이 뭔가를하고 싶은 모든 객체
입니다val onlyNice = true;
val users: List[String] = getNames()
val result = users
.filter(_.contains("john")
.map(._toUpperCase)
.filter(p => isNice) // here i would need to apply this filter only if `onlyNice` is true
.map(p => countryOf(p));
, 나는 단지 onlyNice==true
경우 isNice
필터를 적용 할.
val result = users
.filter(_.contains("john")
.map(._toUpperCase)
.filter(p => !onlyNice || isNice)
.map(p => countryOf(p));
을하지만 우리는 onlyNice이 거짓 인 경우에도 모든 목록을 통과하기 때문에 이것은 성능이 저하 될 것입니다 : 나는 다음과 같이 그것을 할 수 있습니다.
다음과 같이 우리가 할 수있는 :
val tmp = users
.filter(_.contains("john")
.map(._toUpperCase)
val tmp2 = if (onlyNice) tmp.filter(isNice) else tmp
val result = tmp2.
.map(p => countryOf(p));
는하지만 읽기가 더 어렵습니다.
이 나에게 좋은 일반화 된 솔루션을 보인다
implicit class ObjectHelper[A](o: A) {
def transform[B](f: A => B): B = f(o)
}
val result = users
.filter(_.contains("john")
.map(._toUpperCase)
.transform(list => if (onlyNice) list.filter(isNice) else list)
.map(p => countryOf(p));
당신은 어떻게 생각하십니까?
이것은 transform
함수가 이미 표준 스칼라 라이브러리 어딘가에 구현 되었습니까?
예제가 컴파일되지 않습니다 (오류 "찾을 수 없음 : 값 |>"). scalaz-core_2.10 7.0.0에 종속성을 추가하고 scalaz._를 가져 와서 컴파일 할 때 다른 것을 필요로합니까? 그리고 API 문서가 있습니까? 나는 단지 https://github.com/scalaz/scalaz에있는 일반 문서 페이지를 찾았습니다. –
'scalaz.syntax.id._'에서 암시 적으로 가져와야합니다. 나는 이것을 나의 대답에 추가했다. –
대단히 감사합니다. 어딘가 API 문서가 있습니까? syntax.id에 대해 어떻게 알아야합니까? –