Her şeyden önce, "tam tersi" uygulamanızın bazı ciddi sorunları vardır. Yönteme, Long
adlı bir tür parametresi koyarak, standart kitaplıktan Long
türünü gölgelediniz. Acı davetiye çıkarıyor java.lang.Long
ve bahsediyorsan sürece, (scala.Long
bir başvuru türü olmadığından ve null
olamaz)
def toOption(value: Long): Option[Long] =
if (value == null) None else Some(value)
Hatta bu tür saçma geçerli: Muhtemelen yerine aşağıdaki anlamına karışıklığı. ve ancak value
null
ise
def toOption(value: String): Option[String] = Option(value)
Bu yöntem None
döndürür: Son olarak, bir referans türü ile uğraşan olsalar bile (gibi String
), tam olarak eşdeğerdir aşağıdakileri, yazma daha iyi olurdu . daha ziyade "kaldırma" foo
ait Option
map
aracılığıyla içine Genellikle foo
bir Option[Long]
geçen açısından düşünmek gerekir
def foo(x: Long) = x * 2
:
sorunuzu çözmek için, aşağıdaki yöntemi olduğunu varsayalım :
scala> val x: Option[Long] = Some(100L)
x: Option[Long] = Some(100)
scala> x map foo
res14: Option[Long] = Some(200)
Option
bütün noktası bir bütün önlemek için (tip düzeyinde) "boş" bir değer olasılığını modellemektir NullPointerException
sınıfı -y sorunları. kullanarak, Option
, Option
adresindeki değerlerle ilgili hesaplamalar yapmanıza olanak tanır ve boş olma olasılığını modellemeye devam eder.
Başka bir yanıt notu olarak, getOrElse
'u Option
'un "kurtarılması" için de kullanmak mümkündür, ancak bu genellikle Scala'daki deyimsel yaklaşım değildir (makul bir varsayılan değerin olduğu durumlar hariç).
+1. –