gpt4 book ai didi

scala - 如何使用 MongoListField 返回列表

转载 作者:可可西里 更新时间:2023-11-01 09:56:08 25 4
gpt4 key购买 nike

我正在学习 lift 和 mongodb。我遇到了如下问题。为了简单起见,我将绕过一些代码。这是代码:

object User extends User with MetaMegaProtoUser[User] {

}

class User extends MegaProtoUser[User] {
def meta = User

//record the post list that user like
object likePostList extends MongoListField[User, ObjectId](this)

def test()
{
val list: = this.likePostList
println(list.length)
}
}

error: value length is not a member of object User.this.likePostList
this.likePostList.length

我可以将 ObjectId 数据存储在 MongoDB 中。但是 MongoListField 不返回列表。为什么?如何将其用作列表。

我尝试将类型大小写添加到 List[OjbectId] 或 List[String] 但没有成功。

val list: List[ObjectId] = this.likePostList.asInstanceOf[List[Object]]

出现错误: java.lang.ClassCastException: com.cosiin.model.User$likePostList$ 无法转换为 scala.collection.immutable.List

我想我使用 MongoListField 的方式不对。但是我不知道怎么用。
谁能帮忙?谢谢

最佳答案

您在 Lift Records 中声明的字段是字段对象,而不是字段中包含的实际值。为了访问您需要调用的实际值:

this.likePostList.get

或者如果该字段是可选的

this.likePostList.valueBox

它返回一个类似 scala.Option 的对象。

如果您仔细想想,这非常有意义,因为您实际上是在将 likePostList 声明为 MongoListField 的一个实例,当您键入:

object likePostList extends MongoListField[User, ObjectId](this)

相对于

val likePostList: List[ObjectId] = ...

Scala 无法自动将其转换为 List[ObjectId]。这与:

class Foo {
val bar = 3
object baz { val greeting = "hello" }
}

val foo = new Foo
println(foo.bar) // prints 3
println(foo.baz) // prints something like Foo$baz$@1d981b6a
println(foo.baz.greeting) // prints "hello"

附言在旧版本的 Lift 中,get 被称为 is

关于scala - 如何使用 MongoListField 返回列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6799828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com