2016-06-21 72 views
0

我是新來斯卡拉,我試圖去構建從另外一個是我從一階對象獲得這個名單是我的模型:從Scala的對象越來越名單

case class Session(
    _id: Option[String], 
    participants: Option[Seq[Participant]]) 
    case class Participant(
    contact: Contact, 
    participantStatus: Option[String]) 
Contact.scala 使用這種循環
case class Contact(
    firstName: Option[FirstName], 
    lastName: Option[LastName], 
    address: Option[Address]) 
Address.scala
case class Address(
    email: Option[String]) 

for (s <- session.participants) println(s) 

我得到:

List(Participant(Contact(Some(FirstName(5m,Some(5),Some(5))),Some(LastName(5,Some(5),Some(5))),Some(Address(None,None,None,None,None,Some(5),Some(5),Some(5),Some([email protected]),None)),None,None),None), Participant(Contact(Some(FirstName(contact1,Some(contact1),Some(contact1))),Some(LastName(contact1,Some(contact1),Some(contact1))),Some(Address(None,None,None,None,None,Some(1),Some(1),Some(1),Some([email protected]),None)),None,None),None)) 

當我嘗試:println(s.contact) 我得到:value contact is not a member of Seq[models.Session.Participant]

+0

你能給我們初始化你的價值嗎?我有一些代碼:for(s < - session.participants)s.map(s => println(s.contact))但我無法測試它:p – Daniel

+0

它的工作:一些(地址(無,無,無,無,無,一些(1),一些(1),一些(1),一些([email protected]),無))但是現在我怎樣才能訪問電子郵件? – Rajeun

+0

s.contact.address.email應該訣竅嗎?但你應該小心所有這些選項,並做一些匹配,看看它是否存在(這幫助我,當我在學習選項:http://danielwestheide.com/blog/2012/12/19/the-neophytes-指導scala-part-5-option-type.html) – Daniel

回答

3

s可變正從session.participants其類型Option[Seq[Participant]],讓您得到Seq[Participant]拉出。如果你想通過你的參與者循環,你需要一個列表/ seq,所以:

val sessionParticipants = session.participants.getOrElse(Seq.empty) 
for (s <- sessionParticipants) println(s) 
+0

您的生成器基本上被翻譯爲'foreach'。 –

+0

您可能想要更改參與者:選項[Seq [Participant]]加入參與者:Seq [參與者] Seq的選項有點奇怪,因爲一個Seq已經有一個Nullobject:空的Seq –

+0

是的,我看到非常感謝你的幫助,另一個最後的事情:當使用(s < - sessionParticipants)println(s.contact.address)我得到一些(地址(無,無,無,無,無,有的(1),有的(1),有的(1),有的([email protected]),無))如何獲取電子郵件? – Rajeun