blog post은 (는) here을 추천했습니다. 이제는 이러한 방법이 유용한 지 궁금합니다. forall
(foreach
과 반대) 및 toList
(Option
)을 사용하는 예를 보여줄 수 있습니까?스칼라 옵션 메서드를 사용하는 예제
답변
나는 toList
방법의 실용적인 예가 하나있다. 당신은 라인 (72)에 Module.scala에서 scaldi (내 스칼라 의존성 주입 프레임 워크)에서 찾을 수 있습니다 : 이러한 맥락 getBindings
방법에서
은 하나 개의 요소와 Nil
또는 List
중 하나를 반환 할 수 있습니다. discoverBinding
으로 Option
으로 검색 할 수 있습니다. Option
을 방법으로 List
(비어 있거나 하나의 요소)로 변환하는 것이 편리하다는 것을 알았습니다.
Option의 많은 메소드는 모두 매우 작은 함수이며 많은 노력을 아끼지 않으므로 그 유용성보다는 모음과 함께 균일 성을 위해 더 많을 수 있지만, 그리고 그 의미는 컬렉션 프레임 워크에 익숙하다면 명확합니다 (Option은 두 개 이상의 요소를 가질 수없는 목록과 같습니다).
forall은 옵션 내에서 값의 속성을 확인합니다. 값이없는 경우 검사가 통과합니다. 예를 들어, 자동차 대여의 경우, 하나의 additionalDriver: Option[Person]
, 당신은 몇 가지 추가 드라이버를 허용하고 목록을 가지고 있다면 당신이 할 것
additionalDriver.forall(_.hasDrivingLicense)
정확히 같은 일을 할 수 사용할 수 있습니다.
toList는 유용한 변환 일 수 있습니다. 옵션 [Option [T]]이 있고 모든 옵션의 값이 Some 인 List [T]를 원한다고 가정하십시오. 당신은 아마 이미 List
의 아는대로, "내부"는 Option
값을 변환 할 수 있습니다 : 당신은
map
이for(option <- options; value in option.toList) yield value
(또는 더 나은
options.flatMap(_.toList)
)를 할 수 있습니다. 이 작업은flatMap
Option
펑터가 (당신이 당신의 동료를 놀라게하려는 경우 "endofunctor"를 말할 수있다)한다 :Option
실제로 모나드이며,flatMap
는 (단일 값의 constructor에 같은과 함께) 일을한다. 이 메서드는 값을Option
으로 바꾸는 함수가 있지만 가지고있는 값이 이미Option
에 "래핑 된"경우flatMap
은 함수를 적용하기 전에 래핑을 저장합니다. 예 :Option[Map[K,V]]
인 경우mapOption.flatMap(_.get(key))
으로 작성할 수 있습니다. 간단한map
을 사용하려는 경우Option[Option[V]]
이 표시되지만flatMap
인 경우Option[V]
이됩니다. 이 방법은 당신이 생각한 것보다 더 시원합니다. 매우 유연한 방식으로 기능들을 함께 묶을 수 있기 때문에 (Haskell 은 모나드를 좋아합니다.)flatten
:Option[Option[T]]
유형의 값을 가진 경우flatten
은Option[T]
으로 바뀝니다.flatMap(identity(_))
과 같습니다.orElse
는 다음Option
밖으로 값을 취득했지만 :steakOption.orElse(hamburgerOption).orElse(saladOption)
getOrElse
: 당신이Option
들에 싸여 몇 가지 대안을 가지고, 당신은 실제로 값을 보유하고 첫 번째를 원하는 경우에, 당신은orElse
이러한 대안을 체인 수 값이 비어 있다면 기본값을 지정하십시오.nameOption.getOrElse("unknown")
.foreach
: 내부 값이있는 경우 수행하십시오.isDefined
,isEmpty
:이Option
에 값이 있는지 확인하십시오.forall
,exists
: 지정된 조건자가 값에 적용되는지 여부를 테스트합니다.forall
은option.map(test(_)).getOrElse(true)
과 동일하고exists
은 동일하며 기본값은false
입니다.toList
: 서프라이즈,Option
을List
으로 변환합니다.
- 1. 스칼라 문제 옵션 생성자
- 2. 스칼라 : 옵션 모음 필터링
- 3. 양식 처리의 스칼라/리프트 예제
- 4. 스칼라 예제 코드 및 지원 중단 문제
- 5. 스칼라 : 옵션 정규 표현식 그룹을 일치
- 6. JQueryMobile에서 autoInitializePage를 사용하는 예제
- 7. Makefile, 디렉토리의 모든 "예제"를 컴파일하는 옵션?
- 8. Reflector.Invoke 메서드를 사용하여 옵션 매개 변수로
- 9. getX 메서드를 사용하는 경우
- 10. 스칼라
- 11. ImageSwitcher에서 makeView() 메서드를 사용하는 이유
- 12. TypedArray에서 recycle() 메서드를 사용하는 이유
- 13. 다른 클래스의 메서드를 사용하는 Python
- 14. 사용자 메서드를 사용하는 jQuery 플러그인
- 15. android.view.ViewDebug 정적 메서드를 사용하는 방법?
- 16. NSManagedObjectContext의 save : 메서드를 사용하는 경우
- 17. toString() 메서드를 사용하는 새로운 클래스
- 18. 스칼라 열거 형 객체에 메서드를 추가하는 방법은 무엇입니까?
- 19. RESTEasy가 스칼라 클래스에서 주석 메서드를 호출 할 수 없습니다.
- 20. 이름이 문자열에 저장된 메서드를 호출 할 수있는 스칼라 기능이 있습니까?
- 21. 특성의 메서드로 스칼라 클래스 메서드를 재정의 할 수 있습니까?
- 22. DatePicker 예제 in android
- 23. NetBeans를 사용하는 Android 용 스칼라 개발
- 24. Netbeans (선호 6.8)를 사용하는 Android의 스칼라
- 25. 스칼라 케이스 클래스를 사용하는 Squeryl의 스키마 정의
- 26. 스칼라 : 함수를 퍼스트 클래스 객체로 사용하는 문제
- 27. C++에서 간단한 함수를 사용하는 예제 프로그램
- 28. SHA512에 여러 번 반복을 사용하는 예제
- 29. netbeans를 사용하는 줄무늬 프레임 워크 샘플 예제
- 30. LinQ 및 모달 창을 사용하는 ListView 예제
링크가 죽었습니다 (지금) –
@AdamFraser : 죄송합니다. 링크를 업데이트하고 마스터 대신 특정 커밋 트리를 사용했습니다. – tenshi