4 Stimmen

Warum haben Scala Sammlungen keine menschenlesbaren Methoden wie .append, .push, etc

Scala-Sammlungen haben eine Reihe von lesbaren und fast lesbaren Operatoren wie :+ y +: aber warum gibt es keine für Menschen lesbaren Synonyme wie append ?

9voto

Maurício Linhares Punkte 38957

Alle änderbar Sammlungen in Scala haben die BufferLike-Eigenschaft und sie definiert eine anhängen. Methode.

Unveränderlich Sammlungen haben nicht die Eigenschaft BufferLike und definieren daher nur die anderen Methoden, die die vorhandene Sammlung nicht verändern, sondern eine neue erzeugen.

4voto

soc Punkte 27476

Symbolische Methodennamen erlauben die Kombination mit der Zuweisungsoperation = .

Zum Beispiel, wenn Sie eine Methode haben ++ die eine neue Sammlung erstellt, können Sie automatisch die ++= um die neue Sammlung einer Variablen zuzuweisen:

var array = Array(1,2,3)
array ++= Array(4,5,6)
// array is now Array(1,2,3,4,5,6)

Dies ist ohne symbolische Methodennamen nicht möglich.

3voto

paradigmatic Punkte 39621

Oft handelt es sich sogar um Synonyme, die für den Menschen lesbar sind:

  • foldLeft ist gleichbedeutend mit /:
  • foldRight ist gleichbedeutend mit :\

Bei den übrigen handelt es sich um Additionsoperatoren, die ohnehin recht gut lesbar sind:

  • ++ ist äquivalent zu java addAll
  • :+ wird angehängt
  • +: ist vorangestellt

Die Position des Semikolons kennzeichnet die Empfängerinstanz.

Schließlich gibt es noch einige seltsame Operatoren, die von anderen funktionalen Programmiersprachen übernommen wurden. Zum Beispiel Listenkonstruktion (SML) oder Actor-Messaging (Erlang).

2voto

Daniel C. Sobral Punkte 290004

Ist sie anders als jede andere Sprache?

Nehmen wir Java. Was ist die für Menschen lesbare Version von + , - , * y / auf int ? Oder, nehmen wir an String : Wie lautet die für Menschen lesbare Version von + ? Beachten Sie, dass concat ist nicht das Gleiche - es akzeptiert keine nicht String Parameter.

Vielleicht stört Sie das, weil in Java - anders als etwa in C++ - entweder ausschließlich nicht-alphabetische oder alphabetische Operatoren verwendet werden - mit Ausnahme von String 's + .

0voto

retronym Punkte 54220

Die Scala-Standardbibliothek ist nicht darauf ausgerichtet, Java-freundlich zu sein. Stattdessen werden Adapter bereitgestellt, um zwischen Java- und Scala-Sammlungen zu konvertieren.

Der Versuch, eine Java-freundliche API bereitzustellen, würde nicht nur die Wahl der Bezeichner einschränken (oder vorschreiben, dass Aliase bereitgestellt werden sollten), sondern auch die Art und Weise, wie Generika und Funktionstypen verwendet werden, begrenzen. Zur Validierung des Entwurfs wären wesentlich mehr Tests erforderlich.

In diesem Zusammenhang erinnere ich mich an eine Debatte darüber, ob die 2.8er Sammlungen die java.util.Iterable .

http://scala-programming-language.1934581.n4.nabble.com/How-to-set-the-scale-for-scala-BigDecimal-s-method-td1948885.html

http://www.scala-lang.org/node/2177

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X