Scala 斯卡拉:“我的朋友。”;id:Option[Long]“是什么;?

Scala 斯卡拉:“我的朋友。”;id:Option[Long]“是什么;?,scala,playframework,Scala,Playframework,我对Scala和Playframework都是新手,我正试图掌握在类中使用Option[Long]或Option[Int]的想法。例如,我经常看到这一点: case class User(id: Option[Long], name: String) 如果需要,我为什么要使用选项[Long]而不是Long?插入新用户时,如何自动递增Long(而不是选项[Long]) 此外,我对期货和承诺背后的概念不太熟悉,但这能被使用吗 ps抱歉,如果这些是愚蠢的问题为id字段使用选项类型的原因是允许

我对Scala和Playframework都是新手,我正试图掌握在类中使用
Option[Long]
Option[Int]
的想法。例如,我经常看到这一点:

case class User(id: Option[Long],
    name: String)
如果需要,我为什么要使用
选项[Long]
而不是
Long
?插入新用户时,如何自动递增
Long
(而不是
选项[Long]

此外,我对期货和承诺背后的概念不太熟悉,但这能被使用吗


ps抱歉,如果这些是愚蠢的问题

id
字段使用
选项
类型的原因是允许临时对象创建。如果要创建新用户,则需要先实例化
user
的实例,然后才能为其分配数据库
id
。在这种情况下,您可以将其创建为
用户(无,“bob”)
为什么要使用选项[Long]?因为id将自动生成,即您不知道id是什么,所以无法设置它。创建User(None,“SomeName”),在持久化它之后,id将由持久化层(从DB读取)填充


Future是异步进行的计算的包装器。Promise是一个对象,它允许您传达计算已成功完成(使用值),或失败(使用异常)。你可以把它看作是“一些可能成功或失败的计算”的包装器。这似乎是一种笨拙的方法。理想情况下,您在创建时会有一个
选项[Long]
,在阅读时会有一个
Long
。我意识到当数据库创建有问题的
Long
时,这是很困难的,但在从数据库加载后保证是
Some
的情况下,必须处理
None
的情况似乎仍然是次优的。@MystiousDan你是对的,如果省略用户的id完全有帮助的话,您可能需要尝试一下。您可以在需要时始终使用(Long,User)元组,或者编写另一个case类SaveUser(id:Long,User:User),甚至可以考虑一个通用的保存的[Model]case类。如果您觉得数据布局不合适,请更改它,直到它完全适合。