Temel olarak, kullanmadan önce bir değişkende saklamak zorunda kalmadan özel bir çıkarıcı oluşturabilirim.Aspiratörler, bir kasa ekstresinin gövdesinde (veya çıkarıcının kullanılabileceği herhangi bir yerde) parametrelerle özelleştirilebilir mi?
Bu, onu nasıl kullanacağımın gerçek bir örneği değil, normal ifade veya kurgu gibi başka bir dize kalıbı durumunda daha fazla kullanılır, ancak umarım, aradığımı açıklar: sadece tek bir özel çıkarıcı yaparken
def someExtractorBuilder(arg:Boolean) = new {
def unapply(s:String):Option[String] = if(arg) Some(s) else None
}
//I would like to be able to use something like this
val {someExtractorBuilder(true)}(result) = "test"
"test" match {case {someExtractorBuilder(true)}(result) => result }
//instead I would have to do this:
val customExtractor = someExtractorBuilder(true)
val customExtractor(result) = "test"
"test" match {case customExtractor(result) => result}
çok fark yaratmaz, ama bir case ifadesi için presi büyük bir liste oluşturmaya olsaydı, bu tüm ayırarak şeyler daha zor okumak için yapabilir çıkarıcılar kullanımlarından.
Cevabın bunu yapamaz hayır bekliyoruz ama önce etrafında sormak düşündüm: D
Ve yaptınız mı? scala> val {someExtractorBuilder (true)} (sonuç) = "test":: 1: Hata: –
ben denemek yaptım, bir sözdizimi hatası alınan basit desen val yasadışı bir başlangıç {someExtractorBuilder (true)} (sonuç) = "test" ^ –
Nihayetinde ne yapmaya çalışıyorsunuz? Bunu yapmanın daha iyi bir yolu var, çok fazla çıkarıcı yapmaktan daha iyi. –