#scala
Вопрос:
Я разделяю строку, чтобы получить массив, а затем создаю из нее объект класса case. Это мой код.
case class Opp
(
a: String,
b: String,
c: String,
d: String,
e: String,
f: String,
g: String,
h: String
)
def getStruct(fff: String): Opp = {
val xxx = fff.split("-")
var opp : Opp = null
if xxx.length < 8{
opp = Opp(xxx[0], xxx[1], xxx[2], xxx[3], xxx[4], xxx[5], xxx[6], null))
}else{
opp = Opp(xxx[0], xxx[1], xxx[2], xxx[3], xxx[4], xxx[5], xxx[6], xxx[7]))
}
}
Это работает, но есть ли лучший способ сделать это?
Комментарии:
1. Я бы превратил
Array
в aList
и использовал сопоставление с образцом , а также использовалOption
null
для дополнительных значений.
Ответ №1:
case class Opp(a: String
,b: String
,c: String
,d: String
,e: String
,f: String
,g: String
,h: String)
object Opp {
def apply(ss: Seq[String]): Opp = {
val itr = ss.iterator Iterator.continually("") //avoid null if you can
new Opp(itr.next(), itr.next(), itr.next()
,itr.next(), itr.next(), itr.next()
,itr.next(), itr.next())
}
}
использование:
val myopp = Opp("a-b-c-d-e".split("-"))
Комментарии:
1. Нет необходимости использовать
new