2017-11-27 8 views
1

작동하지 않습니다포주 Joda LOCALDATE 내 라이브러리 내가 LOCALDATE에 새로운 방법 <code>to</code>를 추가하고 여기에

import cats.effect.IO 
import EnhancedDate.EnhancedDate 

def loadCadUsdRates: IO[Map[String, CadInUsd]] = IO { 
    val start = new org.joda.time.LocalDate(startYear,1,1) 
    val end = new org.joda.time.LocalDate(endYear+1,1,1).minusDays(1) 
    start to end map(f) toMap 
} 

기능 f 정말 중요하지 않습니다; 당신은 그 가치가있는 모든 것에 대해 동일성을 사용할 수 있습니다.
나는 아이디어를 사용하고 모든 IDE에서 괜찮 (NO 빨간색 underlyings)하지만 난 그것을 실행할 때이 오류가 얻을 : 전에

Error:(104, 9) value to is not a member of org.joda.time.LocalDate
start to end map(f) toMap

지금은 사용했습니다 포주 내 라이브러리 내가이 확신 그것을 할 수있는 올바른 방법이지만 거기에 호환되지 않는 joda 날짜에 관한 것이 있어야합니다 ... Joda LocalDate를 포주로 찍었습니까? 왜 이것이 작동하지 않는지 모르겠 음.

+1

implicits 디버깅, 명시 적 암시를 적용하려고하는 데 도움이 여기에

package object myPackage { implicit class EnhancedDate(start: org.joda.time.LocalDate) { ... } } 

가 작동하지 그것의 데모입니다 시작) 끝내고 ... 그게 효과가 있는지보십시오. 물론 디버깅하는 동안. –

+0

@AlvaroCarrasco는 힌트를 보내 주셔서 감사합니다. 이런 식으로하면 잘 작동합니다 .. – Adrian

+1

'EnhancedDate' (최상위 레벨)이란 무엇입니까? 소포? 객체? 그것은 별도의 파일에 있습니까? –

답변

3

정확하게는 아닙니다. 여기에 무슨 일이 일어나고 있는지는 알 수 있지만, 암시 적 클래스와 같은 이름의 모듈 인 선언과 관련이 있습니다.. 즉, 범위에 두 개의 식별자 (EnhancedDate)가 있고 이는 해상도의 모호성을 야기한다고 가정합니다. 확실히 Joda와는 아무 관련이 없습니다. 한 가지 확실한 해결 방법은 에 가장 가까운 패키지 객체 내에 암시 적 클래스를 배치하는 것입니다. 여기

scala> :paste 
// Entering paste mode (ctrl-D to finish) 

object Foo { 
    implicit class Foo(s: String) { def foo = println(s"Foo: $s") } 
} 

// Exiting paste mode, now interpreting. 

defined object Foo 

scala> import Foo._ 
import Foo._ 

scala> "hey".foo 
<console>:14: error: value foo is not a member of String 
     "hey".foo 
      ^

가 노력하고 있습니다 :`새 EnhancedDate을 (:

scala> object Bar { 
    | implicit class Foo(s: String) { def foo = println(s"Foo: $s") } 
    | } 
defined object Bar 

scala> import Bar._ 
import Bar._ 

scala> "hey".foo 
Foo: hey 
+0

당신은 바로 위에! – Adrian

관련 문제