Benim kodunda böyle bir şey yazabilirsiniz acaba:Yok için type argümanı belirtebilir veya derleyiciye bir Option [String] olduğunu söyleyebilir misiniz?
None[String]
Benim kodunda böyle bir şey yazabilirsiniz acaba:Yok için type argümanı belirtebilir veya derleyiciye bir Option [String] olduğunu söyleyebilir misiniz?
None[String]
Eğer kullanabilirsiniz Option
türünü belirtmek isterseniz:
Hiçbiri: Opsiyon [dize]
Kolon açık bir tür ek açıklamadır.
import scalaz._
import Scalaz._
none[String] // res0: Option[String] = None
Sen scalaz ile can
bir tartışma her türlü alabilir ikencase object None extends Option[Nothing]
, None
Nothing
ile parametreli bir Option
özel bir örneği/tekil olduğunu. Ayrıca, Option
,, Nothing
Scala'daki tüm türleri Nothing
tüm türleri genişletdiğinden, Option[Nothing]
Option
herhangi bir yerde kullanılabileceği anlamına gelir. Yani, Nothing
değerini temsil edecek başka değerler oluşturmaya gerek yoktur, tek bir None
tüm durumlar için yeterli olacaktır.
Genişletilebilirlik açısından Option
mühürlü bir soyut sınıftır, dolayısıyla genişletemezsiniz. Alt sınıfları Some
ve None
'u genişletemezsiniz, çünkü bunlar örnek sınıflardır.
Genellikle None[String]
gibi bir şey yazmayı denemenize gerek yoktur, çünkü daha spesifik Option
türü bağlamda bir yerde tanımlanmıştır. Örneğin, bir fonksiyon argüman olarak:
def f(o: Option[String]) = ...; f(None)
veya
bir incelik olarak:val o: Option[String] = None
Üstelik, gerçekten, bu bir Nothing
değeri ise bir seçenek olduğunu tip umurumda değil yapamazsın bunun dışında bir şey olsun, Java'daki null
gibi ama Monadic davranışıyla.
Scalaz: none[String]
'da benzer bir şey yapabildiğinizden bahsedilmiştir. Bu, türlerin açıklanması gereken bazı durumlarda ayrıntıyı azaltmak için çok uygun olsa da, sadece bir sözdizimidir.Böyle olarak tanımlanan oluyor: çoğu durumda sadece bir Option[String]
iyi çalışır bekleniyor None
kullanarak o
scala> Option.empty[String]
res0: Option[String] = None
Not:
final def none[A]: Option[A] = None
Option
bir parametreli türüdür ve bu şekilde tanımlanır::
... sealed abstract class Option[+A] ...
o 2 diğer sınıflara uzatılabilir ediliyor:
final case class Some[+A](x: A) extends Option[A]
ve
Yazdıklarınız için teşekkürler – jinglining
@Aleksey Izmailov: Sizin 'none' yönteminiz standart kütüphanede zaten var:' Seçenek .empty'. –
bu benim yöntemim değil, '' scalaz'dan hiç kopyalamadım;) –
kimsenin Option.empty
varlığından söz şaşırıyorum.
def f(o: Option[String]) = ...; f(None)
None
Option
sayesinde olmak kovariant bunu, Option[Nothing]
uzanır, bu (ve Nothing
her bir alt tipi söz konusu olur: ya da (Aleksey Izmailov ile gösterildiği gibi), diğer bir deyişle, aşağıdaki corrrect olan Diğer tür), None
her zaman T
için Option[T]
ile uyumludur.
scala> None: Option[String]
res0: Option[String] = None
+1' boş '- scalaz –
dan gerçekten çok farklı değil Evet 'Option.empty [Tür]' en iyi uygulamadır. Benzer şekilde boş listeler için ve böyle bir liste olmalıdır. List.empty [Tür] ' – samthebest
@samthebest' Option.empty' açık tip ek açıklamadan daha iyi nedenler var mı? Sadece meraklı – acjay
: tip yakıştırma (o tip çıkarsama sürücü gerekli olup olmadığına örnek, seçenekler türüne açık olması gerekiyor durumlar için) ince bir alternatif de neden
Bu
da Yazdığınızı biliyorum, benim amacım tip olarak None belirtebilmem mümkün değil: val a: None [String] = – jinglining