1

私が何を間違っているのかわからないという単純な問題 - どこかでタイプの不一致。基本的に、Web リクエストからのパラメーターにデフォルトのデータ型 Long を設定しようとしています。コードは次のとおりです。

val startTs:Long = params.getOrElse("start_ts", DateTime.yesterdayAsEpoch).toLong
val endTs:Long = params.getOrElse("end_ts", DateTime.todayAsEpoch).toLong

私の DateTime ヘルパー コード:

def todayAsEpoch: Long = {
    val c = Calendar.getInstance(TimeZone.getTimeZone("EST"))
    c.setTime(new java.util.Date())
    c.set(c.get(Calendar.YEAR),c.get(Calendar.MONTH),c.get(Calendar.DAY_OF_MONTH),0,0,0)
    c.getTimeInMillis / 1000L
  }

  def yesterdayAsEpoch: Long = {
    val c = Calendar.getInstance(TimeZone.getTimeZone("EST"))
    c.setTime(new java.util.Date())
    c.set(c.get(Calendar.YEAR),c.get(Calendar.MONTH),c.get(Calendar.DAY_OF_MONTH),0,0,0)
    ((c.getTimeInMillis / 1000L) - 86400)
  }

そして最後に、エラー:

value toLong is not a member of Any
[error]         val startTs:Long = params.getOrElse("start_ts", DateTime.yesterdayAsEpoch).toLong
[error]                                                                                    ^
[error] /vagrant/src/main/scala/com/myapp/api/controllers/FooController.scala:437: value toLong is not a member of Any
[error]         val endTs:Long = params.getOrElse("end_ts", DateTime.todayAsEpoch).toLong
[error]                                                                            ^
[error] two errors found
[error] (compile:compile) Compilation failed
4

2 に答える 2

3

あなたは何であるかを言いませんでしたparamsMap[String, X]with some typeのようXです。は、エラー メッセージによると、たまたま であり、toLong メソッドを持たないparams.getOrElse(key, someLong)の最も一般的なスーパータイプを持つと見なされます。あなたのデフォルト値はたまたますでに Long になっているので、変換する必要はありません。メソッド onがあると思います。XLongAnytoLongX

そうである場合は、デフォルト値を提供する前に、取得した値paramsを(そのような値がある場合) に変換する必要があります。Longそれは次のようになります。

params.get("key").map(_.toLong).getOrElse(defaultValue)
于 2013-09-07T21:55:29.903 に答える
1

だと思いますparamsMap[String, Something]、それSomethingは必ずしも数値型ではありません。(文字列?) いずれにせよ、 を呼び出すと、params.getOrElseと の間で共通の型が推論され、が検出されるため、それを呼び出すことはできません。SomethingLongAnytoLong

于 2013-09-07T21:47:13.737 に答える