[英]How do I get the actual value from this in Scala : Right(Vector(“abc”))
我正在使用加特林測試基於WebSocket的服務,為了解析json響應,我得到了以下內容:
val initiator = JsonPath.query("$.header.initiator", json).right.map(_.toVector)
打印啟動器告訴我這是:
Right(Vector(guest3075085133639688955@example.com))
現在到初學者Scala問題:
如何獲取實際的字符串值“ guest3075085133639688955@example.com”?
我了解到Right只是一個容器,包含一個帶有一個值(我想要的值)的Vector,但是我該怎么去呢? :)
我已經嘗試過了,但這只是打印出相同的東西(Right(Vect ....):
initiator.foreach{println}
干杯,尼克拉斯
right
獲得Either
的RightProjection
並get
Right
內部的值。 head
從Vector
獲取第一個(並且僅在您的情況下)元素。 看起來像:
val initiator: Either[String, Vector[String]] =
Right(Vector("guest3075085133639688955@example.com"))
initiator.right.get.head
// String = guest3075085133639688955@example.com
您還可以進行模式匹配:
val Right(Vector(email)) = initiator
// email: String = guest3075085133639688955@example.com
請注意,這兩種方法僅在initiatior
器為“ Right
且“ Vector
內部具有至少一個元素時才起作用。 您的問題還不太清楚,您想如何處理Left
和/或空的Vector
。
如果您想以其他方式處理所有失敗的案例,則可以使用:
initiator match {
case Right(Vector(email)) => email // ok
case _ => // default -> fail
}
initiator.right.get
無論從是不安全的。 因為如果它是一個左值,它將拋出java.util.NoSuchElementException
。
通過模式匹配:
initiator match {
// when it is a right value, which is a vector with single element
case Right(Vector(s)) => println(s)
// when it is a right value, which is a vector with empty or two or more elements.
case Right(v) => ???
// when it is a left value
case Left(l) => ???
}
在注釋中,您澄清了這是針對測試用例的情況。 如果您使用的是ScalaTest匹配器,則可以執行以下操作:
initiator should matchPattern{case Right(Vector("expected value")) => }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.