2011-07-26 11 views

답변

6

나는 toList 방법의 실용적인 예가 하나있다. 당신은 라인 (72)에 Module.scala에서 scaldi (내 스칼라 의존성 주입 프레임 워크)에서 찾을 수 있습니다 : 이러한 맥락 getBindings 방법에서

https://github.com/OlegIlyenko/scaldi/blob/f3697ecaa5d6e96c5486db024efca2d3cdb04a65/src/main/scala/scaldi/Module.scala#L72

은 하나 개의 요소와 Nil 또는 List 중 하나를 반환 할 수 있습니다. discoverBinding으로 Option으로 검색 할 수 있습니다. Option을 방법으로 List (비어 있거나 하나의 요소)로 변환하는 것이 편리하다는 것을 알았습니다.

+0

링크가 죽었습니다 (지금) –

+0

@AdamFraser : 죄송합니다. 링크를 업데이트하고 마스터 대신 특정 커밋 트리를 사용했습니다. – tenshi

10

Option의 많은 메소드는 모두 매우 작은 함수이며 많은 노력을 아끼지 않으므로 그 유용성보다는 모음과 함께 균일 성을 위해 더 많을 수 있지만, 그리고 그 의미는 컬렉션 프레임 워크에 익숙하다면 명확합니다 (Option은 두 개 이상의 요소를 가질 수없는 목록과 같습니다).

forall은 옵션 내에서 값의 속성을 확인합니다. 값이없는 경우 검사가 통과합니다. 예를 들어, 자동차 대여의 경우, 하나의 additionalDriver: Option[Person], 당신은 몇 가지 추가 드라이버를 허용하고 목록을 가지고 있다면 당신이 할 것

additionalDriver.forall(_.hasDrivingLicense) 

정확히 같은 일을 할 수 사용할 수 있습니다.

toList는 유용한 변환 일 수 있습니다. 옵션 [Option [T]]이 있고 모든 옵션의 값이 Some 인 List [T]를 원한다고 가정하십시오. 당신은 아마 이미 List의 아는대로, "내부"는 Option 값을 변환 할 수 있습니다 : 당신은

24
  • map

    for(option <- options; value in option.toList) yield value 
    

    (또는 더 나은 options.flatMap(_.toList))를 할 수 있습니다. 이 작업은

  • flatMapOption 펑터가 (당신이 당신의 동료를 놀라게하려는 경우 "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]] 유형의 값을 가진 경우 flattenOption[T]으로 바뀝니다.flatMap(identity(_))과 같습니다.
  • orElse는 다음 Option 밖으로 값을 취득했지만 : steakOption.orElse(hamburgerOption).orElse(saladOption)
  • getOrElse : 당신이 Option들에 싸여 몇 가지 대안을 가지고, 당신은 실제로 값을 보유하고 첫 번째를 원하는 경우에, 당신은 orElse 이러한 대안을 체인 수 값이 비어 있다면 기본값을 지정하십시오. nameOption.getOrElse("unknown").
  • foreach : 내부 값이있는 경우 수행하십시오.
  • isDefined, isEmpty :이 Option에 값이 있는지 확인하십시오.
  • forall, exists : 지정된 조건자가 값에 적용되는지 여부를 테스트합니다. foralloption.map(test(_)).getOrElse(true)과 동일하고 exists은 동일하며 기본값은 false입니다.
  • toList : 서프라이즈, OptionList으로 변환합니다.
관련 문제