1

私はscalaとslickを勉強しています。そして、次のようなエラーが発生しました。

found :   Option[Int]
required: Int
  def update(c: Color): Int = findById(c.id).update(c)

foundとはどういう意味かわかりませんrequired。だから私は他の機能を追加します:

def update(c: Color): Int          = findById(c.id).update(c)
def update2(c: Color): Option[Int] = findById(c.id).update(c)
def update3(c: Color): String      = findById(c.id).update(c)
def update4(c: Color): Unit        = findById(c.id).update(c)

foundそして、異なるとを期待していrequiredますが、同じエラーが出ました:

found :   Option[Int]
required: Int
  def update(c: Color): Int = findById(c.id).update(c)

found :   Option[Int]
required: Int
  def update2(c: Color): Option[Int] = findById(c.id).update(c)

found :   Option[Int]
required: Int
  def update3(c: Color): String      = findById(c.id).update(c)

found :   Option[Int]
required: Int
  def update4(c: Color): Unit        = findById(c.id).update(c)

なぜ同じエラーが出たのですか?見つかったものと必要なスタンドは何ですか? ありがとう。

4

1 に答える 1

2

エラー メッセージのソースは、コードのこの部分です

findById(c.id)

この部分は、与えられた 4 つの例すべてで同じです。したがって、同じエラーメッセージ。

findById( id )は引数としてIntを想定していますが、 c.idはOption[Int]を返します。

可能な解決策は、c.idをマップすることです

c.id map ( id => findById(id) update c  )

次に、 update2の必要に応じて Option[Int] を返します。

または、関数の更新に必要なIntを返すfor 内包表記を使用することもできます。

for {
  id <- c.id
  elem = findBy(id)
} yield elem.update(c)
于 2014-04-21T17:44:39.257 に答える