"How to convert a Some(“ ”) to None in one-line?"에 대한 허용 대답의 형식을했다. Scaladoc for Option 생성자, Option Object, Predef, Seq 및 Seq Object를 살펴 보았습니다. 아마 암시 적으로 어딘가에있을 거라 생각하지만, 어떻게 그걸 발견하려고합니까?Option이 컬렉션이 아닌 경우 컬렉션은 어떻게 작동합니까?</p> <pre><code>def convert(x: Option[String]) : Option[String] = x.map(_.trim()).filterNot(_.isEmpty()) </code></pre> <p>내 문제는 내가 filterNot에 의해 반환 된 컬렉션이 옵션으로 변환됩니다 무엇을 의미하는지 직접 확인하는 방법을 알아낼 수 없다는 것입니다 :
답변
scaladoc에서 "상속 별"주문 단추 (메서드 설명 바로 위에 나타남)를 클릭 할 수 있습니다. 이렇게하면 주어진 메소드의 구체적인 구현을 찾는 데 도움이됩니다. 해당 클래스로 건너 뛰고 소스를 살펴 봅니다 (소스에 대한 링크가 클래스/특성/오브젝트 설명에 나타납니다). 옵션의 경우
는 암시 값이 필요한 경우, 당신은 알 등 인수 목록에서 implicit
절 또는 [A: MyImplicit]
같은 바인딩 컨텍스트 중 하나 filter
, map
라는 방법이있다 매개 변수에. 암시 적은 일반적으로 컴패니언 객체에서 가져 오거나 선언됩니다.
자세한 질문/예제가 있으면 알려 주시기 바랍니다.
아! 미안, 마침내 알았어. 필자는 옵션 자체가 컬렉션이라면 Option이 특성이나 상속을 나타낼 것이라고 가정 했었습니다. 일단 그것이 제품 일 뿐이라는 것을 알았 더라면 "지도"를 "알고"있기 때문에 자체 멤버를 보지 못했습니다. et al은 거기에 없을 것이다. –
주어진 메소드의 구체적인 구현은 항상 그 설명 아래에 있습니다. –
@ DanielC.Sobral 정의 클래스를 의미합니까? – paradigmatic
컬렉션처럼 작동하지 않으며 모나드처럼 작동합니다. 컬렉션도 마찬가지입니다. –
@LuigiPlinge : foreach와 iterator가있는 것은 적어도 최소한 _my_ duck 테스트에 의한 콜렉션입니다.이 메소드는 모나드에 본질적이지 않습니까? 어떤 방식으로 컬렉션이 컬렉션의 역할을하지 않는다고 말하는가? 그렇지 않은가? –
이 예제에서는'map'과'filter' 메소드를 가지고 있기 때문에 콜렉션과 같은 것이라고 말하고 있습니다. 그러나 이것들은 (flatMap과 함께) 모나드 연산이다. 물론 Options를 콜렉션과 같이 생각할 수도 있습니다 (암시 적으로'List' 로의 변환이 있습니다). 그러나이 질문에는 아무런 관련이 없습니다. 'Option'은 둘 다'toString' 메소드를 가지고 있기 때문에'Foo'와 같다고 말하는 것과 같습니다. –