2017-11-27 16 views
1

動作しない私はLOCALDATEに新しい方法toを追加しています:ポン引き私のライブラリはここで

object EnhancedDate { 
    implicit class EnhancedDate(start: org.joda.time.LocalDate) { 
    /** Generates dates between start and end - inclusive */ 
    def to(end: org.joda.time.LocalDate): IndexedSeq[org.joda.time.LocalDate] = { 
     val numberOfDays = Days.daysBetween(start, end.plusDays(1)).getDays() 
     for (f <- 0 to numberOfDays) yield start.plusDays(f) 
    } 
    } 
} 

、今、それを使用して:本当に問題ではないf

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 
} 

機能。あなたはそれが同じであるすべての価値のためにアイデンティティを使用することができます。
私はアイデアを使用して、すべてがIDE(なし赤原資産)で結構ですが、私はそれを実行したとき、私はこのエラーを取得:

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

今、私は前にポン引き私のライブラリを使用していると私は、このかなり確信していますそれを行う正しい方法ですが、それと互換性のないジョーダの日付についての何かがなければなりません...ジョーダのローカル日付を投げてみましたか?私はこれがなぜ動作しないのかわかりません。

+1

を暗黙をデバッグするとき、それが明示的、暗黙的に適用しようとするのに役立ちます: '新しいEnhancedDate(開始する)を終了すると...それが動作するかどうかを確認します。もちろんデバッグ中です。 –

+0

@AlvaroCarrascoはヒントのために感謝します。このようにすれば正常に動作します。 – Adrian

+1

'EnhancedDate'(トップレベル)とは何ですか?パッケージ?オブジェクト?それは別ファイルですか? –

答えて

3

私は正確ではありませんここで何が起きているのかはっきりしているクラスと同じ名前のモジュールである宣言と関係するものです。つまり、スコープ内に2つの識別子があり、どちらもEnhancedDateと呼ばれていますが、これは解決のあいまいさを引き起こすものと想定しています。確かにJodaとは関係ありません。回避策の1つは、に、最も近いパッケージオブジェクトの中に暗黙のクラスを配置することです。

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

はここで働いていないことのデモンストレーションです:

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 
      ^

をここでは、働いている:

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

関連する問題