Heim > Java > javaLernprogramm > Eine kurze Diskussion zum Mustervergleich in Scala

Eine kurze Diskussion zum Mustervergleich in Scala

不言
Freigeben: 2018-11-16 15:40:39
nach vorne
2169 Leute haben es durchsucht

Der Inhalt dieses Artikels ist eine kurze Diskussion über den Mustervergleich in Scala. Er hat einen gewissen Referenzwert. Ich hoffe, er wird für Sie hilfreich sein.

1. Scala-Mustervergleich

Man kann sagen, dass der Mustervergleich eine sehr leistungsstarke Sprachfunktion in Scala ist, aber das hindert ihn nicht daran scala. Ein großartiges Werkzeug für die Sprache.

Scalas Mustervergleich ähnelt diesem,

e match {
  case Pattern1 => do Something
  case Pattern2 if-clause => do others
  ...
}
Nach dem Login kopieren

wobei auf die Variable e eine Übereinstimmung und ein Codeblock folgen, wobei jeder Fall einem möglichen Übereinstimmungstyp entspricht, wenn er erfolgreich ist , der Code nach => wird ausgeführt.

Wir können ein konkreteres Beispiel verwenden, um zu sehen, wie der Mustervergleich funktioniert:

case class Player(name: String, score: Int)
def printMessage(player: Player) = player match {
  case Player(_, score) if score > 100000 =>
    println("Get a job, dude!")
  case Player(name, _) =>
    println("Hey, $name, nice to see you again!")
}
Nach dem Login kopieren

In anderen Sprachen sieht es ein bisschen ähnlich aus, aber es ist tatsächlich ganz anders.

Nehmen Sie den Java-Schalter als Beispiel. Der Java-Schalter führt nur einige grundlegende Typübereinstimmungen durch und führt dann einige Aktionen aus und hat keinen Rückgabewert.

Der Mustervergleich von Scala ist viel leistungsfähiger. Zusätzlich zum Abgleichen von Werten kann er auch Typen abgleichen.

def parseArgument(arg: String) = arg match {
    //匹配值
    case "-h" | "--help" => displayHelp
    case "-v" | "--version" => displayVerion
    case whatever => unknownArgument(whatever)
}
Nach dem Login kopieren
rrree

Gleichzeitig hat der Mustervergleich einen Rückgabewert, wie zum Beispiel der obige Treffer, der eine Einheit zurückgibt. Wir können den obigen Code auch ändern, um eine Zeichenfolge zurückzugeben:

def f(x: Any): String = x match {
    //匹配类型
    case i:Int => "integer: " + i
    case _:Double => "a double"
    case s:String => "I want to say " + s
}
Nach dem Login kopieren

Es ist erwähnenswert, dass der Rückgabewert des Mustervergleichs durch den Codeblock im ersten übereinstimmenden Muster bestimmt wird.

2. Warum den Mustervergleich verwenden?

Wenn Sie dies sehen, ist der Mustervergleich nicht mit dem vergleichbar. Warum also Mustervergleich verwenden?

Zunächst müssen wir verstehen, dass der Mustervergleich im Wesentlichen eine bequeme Möglichkeit zur Destrukturierung von Datenstrukturen darstellt. Der Mustervergleich wendet tatsächlich die Funktion des Extraktors in Scala an unapply()-Methode in der Klasse.

case class Player(name: String, score: Int)
def message(player: Player) = player match {
  case Player(_, score) if score > 100000 =>
    "Get a job, dude!"
  case Player(name, _) =>
    "Hey, $name, nice to see you again!"
}
Nach dem Login kopieren
rrree

Nachdem Sie die Essenz des Mustervergleichs verstanden haben, werden Sie feststellen, dass if else nur eine typische Verwendung beim Mustervergleich ist, aber nicht alles davon.

Gleichzeitig können Sie durch den Mustervergleich zwei Dinge entkoppeln, die nicht wirklich zueinander gehören, und Ihren Code einfacher testen. Beispielsweise können wir den Code für den Match-Teil oben wie folgt schreiben:

trait User {
  def name: String
}
class FreeUser(val name: String) extends User
object FreeUser {
  //提取器
  def unapply(user: FreeUser): Option[String] = Some(user.name)
}
Nach dem Login kopieren

Dies verleiht dem Code mehr Flexibilität und macht weitere Vorgänge komfortabler.

Aus Sicht der Lesbarkeit ist die Verwendung vieler if-else-Codes zweifellos hässlich. Wenn Sie jedoch den Mustervergleich verwenden, wird der Code viel einfacher und klarer und der Code ist einfacher zu lesen .

Das obige ist der detaillierte Inhalt vonEine kurze Diskussion zum Mustervergleich in Scala. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage