根據我的理解,部分函數是爲輸入值的子集定義的函數。 所以我應該使用DAO的部分函數。例如:我應該使用部分函數進行數據庫調用嗎?
getUserById(userId: Long): User
必定會有不存在分貝的輸入userId
。所以我可以說它沒有定義。當我調用這個函數時將其解除。
如果是,我在哪裏停下來。我是否應該對所有未定義的方法使用部分函數,比如說爲null。
根據我的理解,部分函數是爲輸入值的子集定義的函數。 所以我應該使用DAO的部分函數。例如:我應該使用部分函數進行數據庫調用嗎?
getUserById(userId: Long): User
必定會有不存在分貝的輸入userId
。所以我可以說它沒有定義。當我調用這個函數時將其解除。
如果是,我在哪裏停下來。我是否應該對所有未定義的方法使用部分函數,比如說爲null。
PartialFunction
功能時沒有定義輸入數據的一些元素(輸入數據可能Seq
等)
對於你的情況Option
則採用的是更好的選擇:它說,返回的數據可能是不存在的:
getUserById(userId:Long):Option[User]
我會避免使用部分函數,因爲scala可以很容易地調用部分函數,就像它是一個總函數一樣。相反,最好使用返回Option
的函數,如@Sergey所示;這種「局部性」總是明確的。
地圖scala沒有使用null
所以我不擔心沒有爲null定義的方法,但肯定值得返回Option
的方法,這些方法僅爲其一些可能的輸入值定義。但更好的是,只接受合適的類型作爲輸入。例如。如果你有一個只對非空列表有效的函數,它應該採用(scalaz)NonEmptyList
作爲輸入,而不是List
。