2016-10-08 107 views
0

創建基於條件的元組我有下面的類:如何在斯卡拉

case class Person(
        firstName: String = "", 
        lastName: String = "", 
        age: Int = 1, 
        ssnr: Int = 1 
       ) 

我想創建的元組,其中包括firstName和/或lastName只有當它們的值是不是空的。

當然,我可以做到以下幾點:

if (!person.firstName.isEmpty && !person.lastName.isEmpty) ("firstname" -> person.firstName, "lastName" -> person.lastName, "age" -> person.age, "ssnr" -> person.ssnr)

但是,這將事情,因爲我要檢查一些情況下,如果firstName爲空或lastName是空的,包括或複雜排除他們在這些特定的前提條件(我也有比這兩個更多的屬性)。

有沒有更好的方法比if/else條件來處理?

+0

你將如何使用結果? – talex

+0

我會用'def withQueryString(參數:(String,String)*):WSRequest'中的參數。包括或排除它們取決於值是否爲非空值。 –

+0

我認爲你可以在伴侶對象中使用更強大的類型或者一些可重用的函數,並且可以做到這一點。根據你對這些代碼的使用等等,你所擁有的是非常可讀和清晰的,所以一方面它可能是一些需要再次考慮取決於許多外部因素。 – Barry

回答

0

你應該重載構造函數。默認案例類(也許你可以去一個普通的類)構造函數沒有默認值,而伴隨對象中定義的構造函數可能只有一個默認值或兩者都有。

另一個更習慣的選項是將這些字段設置爲Option[String],以便調用者可以在他們想要省略該值時指定None。我相信第二個是更好的選擇(啊!),但你應該知道如何處理它:一個Option是一個在語義上更強大的方法來建模你的數據,它有很多含義,而第一個java-like選項只是一組預定義的方法,可以用來構建類。