1

複数の場所から取得するデータに対して Squeryl 呼び出しを実行すると、何らかの理由で 1 つの単位として返されます。Iterableとして返すにはどうすればよいですか?

以下はデータのプルです。

/**
   * gets a stream for a particular user
   */
  def getUserStream(userId:Long) {
    User.teamIds(userId).toList.map( (team) =>
      Stream.findByTeam(team,0,5).map( (stream) => 
        List(stream)
      ).flatten
    ).flatten.sortBy(_.id)
  }

そして、結果が次のように返されるデータを出力しますUnit

Stream.getUserStream(userId) match {
      case results => {
        Ok( generate(results.map( (stream) => Map(
                "id" -> stream.id,
                "model" -> stream.model,
                "time" -> stream.time,
                "content" -> stream.content
                ))
            ) ).as("application/json")
      }
      case _ => Ok("")
    }

私の最初の推測では、1 つの関数が None として返される可能性がありますが、空のリストを返すだけではないでしょうか?

4

2 に答える 2

0

役に立つかもしれないことを少し付け加えると、def f(x: Int) {}

と言うのと同じですdef f(x: Int): Unit = {}

戻り値の型を宣言しない場合 (例: def f(x: Int) = {})、型はメソッド本体から推測されます。

特定の型を返すことを保証する手法は、明示的に宣言することです。これは、特定の署名を使用してパブリック インターフェイスをエクスポートする場合に行うことです。型推論にすべての作業を任せると、必要以上に一般的な抽象化が公開される可能性があるため、これは重要です。

def f(x: Int): List[User] = {} // This will not compile.

于 2012-04-09T06:08:31.603 に答える