SORU
14 ŞUBAT 2010, Pazar


Desen Bağlaçlar ile eşleşen (PatternA VE PatternB)

Scala desen eşleştirme disjunctions destek için bir dil özelliği vardır ('Desen Alternatifleri'):

x match {
    case _: String | _: Int => 
    case _ =>
}

Ancak, sık sık eğer scrutinee PatternA karşılayan bir eylemi tetiklemek için gerekirvePatternB (bağlaç.)

Bir desen kombinatorik '&&' bu yeteneği ekler. ben yarattım Scala seviyorum gerçekten bana hatırlatan üç küçük çizgiler!

// Splitter to apply two pattern matches on the same scrutinee.
object && {
  def unapply[A](a: A) = Some((a, a))
}

// Extractor object matching first character.
object StartsWith {
  def unapply(s: String) = s.headOption
}

// Extractor object matching last character.
object EndsWith {
  def unapply(s: String) = s.reverse.headOption
}

// Extractor object matching length.
object Length {
  def unapply(s: String) = Some(s.length)
}

"foo" match {
  case StartsWith('f') && EndsWith('f') => "f.*f"
  case StartsWith('f') && EndsWith(e) && Length(3) if "aeiou".contains(e) => "f..[aeiou]"
  case _ => "_"
}

Tartışma için puan

  1. Bunu yapmak için varolan bir yolu var mı?
  2. Bu yaklaşım ile sorun var mı?
  3. Bu yaklaşım ile oluşturulmuş olabilir diğer yararlı combinators var mı? (örneğin, Not)
  4. Böyle bir kombinatorik standart kütüphane eklenmelidir?

GÜNCELLEME Sadece derleyici case A && B && C yorumlaması istendi. Bu telkin operatör kalıpları (Scala Başvuru Bölümü 8.1.9). Ayrıca normal kalıpları (8.1.7) &&(&&(A, B), C) gibi özü bu ifade olabilir. İfadeler soldan sağa val b = true && false && true Boolean#&& gibi normal operatör telkin yöntemini çağırır başı olarak ilişkili olduğunu fark ettim.

CEVAP
15 ŞUBAT 2010, PAZARTESİ


Gerçekten bu hile gibi. Bunu yapmak için varolan herhangi bir yol bilmiyorum, pek bir anlam ifade etmiyor ki ... herhangi bir sorun olacağını sanmıyorum. Not bir oluşturmak için herhangi bir yol düşünemiyorum.

Standart kitaplığa ekleme için... belki de. Ama biraz zor sanırım. Öte yandan, nasıl dahil Scalaz oğlum. Çok daha fazlası gibi kendi yetki görünüyor.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Hak5DarrensVlog

    Hak5DarrensV

    11 EYLÜL 2009
  • We've moved!

    We've moved!

    7 Ocak 2008
  • ParryGripp

    ParryGripp

    12 AĞUSTOS 2006