7
votes

Scala - sont des cours suffisants?

venant de Java, je suis confus par la distinction de classe / objet de Scala. Notez que je ne demande pas la différence formelle; il y en a assez Références sur le Web qui explique cela et il y a des questions connexes sur donc .

Mes questions sont:

  1. Pourquoi les concepteurs de Scala a choisi de rendre les choses plus compliqué (comparé à Java ou C #)? Quels inconvénients dois-je avoir à attendre si j'ignore cette distinction et ne déclarer que des classes?

    Merci.


1 commentaires

Pourquoi considérez-vous que l'approche Scala a pris pour être plus "compliqué"? Après avoir travaillé avec chaque langue Scala's Solution est de loin le plus facile, surtout lorsque l'héritage et la sous-dactylographie entrent en jeu.


3 Réponses :


2
votes

Scala n'a aucune notion de méthodes statiques avec des classes standard, donc dans ces scénarios, vous devrez utiliser des objets. Article intéressant ici qui fournit une bonne introduction:

http://www.codecommit.com / Blog / Scala / Scala-for-Java-réfugiés-Part-3

(Faites défiler jusqu'à la sorte de statique de Scala)


0 commentaires

24
votes

Les classes Java contiennent deux types de membres complètement différents - des membres d'instance (tels que bigdecimal.plus code>) et des membres statiques (tels que bigdecimal.valueof code>). À Scala, il y a SEULEMENT DES MEMBRES INSPRESSEES STROND>. C'est en fait une simplification! Mais cela laisse un problème: où mettons-nous des méthodes telles que de la valeur code>? C'est là que les objets sont utiles.

val ls = List.empty[Int]  // List is a value, a reference the the object List
ls: List[Int]             // List is a type, a reference to class List


3 commentaires

Le mot clé Object vous donne une classe Singleton (sous-the-Hoot de toute façon) et est le remplacement de Scala pour les membres statiques.


Sachez que si vous avez une classe nommée quelque chose et un objet nommé quelque chose (dans le même package), ces deux sont liés - l'objet est la Companion Objet de la classe et les deux peuvent voir les membres privés de chacun. En comparant avec Java: Pensez aux méthodes de la classe comme méthodes d'instance, ainsi que les méthodes de l'objet en tant que méthodes statiques appartenant à cette classe.


Bon point, Jesper. De plus, l'objet compagnon t d'une classe ou d'un trait t est dans la portée implicite lors de la recherche de valeurs implicites un type x , étant donné que t ou un sous-type de t est une partie de type x . Ceci est utilisé pour trouver des vues implicites et des arguments implicites.



0
votes

Un moyen de regarder c'est ceci. Un programme d'exécution consiste en une communauté d'objets et de threads. Les threads exécutent le code dans le contexte d'objets - c'est toujours un objet "Cet" objet qu'un thread est en cours d'exécution à l'intérieur. C'est une simplification de Java dans le sens qu'en Java, il n'y a pas toujours de "ceci". Mais maintenant il y a un problème de poulet / d'œuf. Si des objets sont créés par des threads et des threads sont exécutés dans des objets, quel objet est le premier fil d'exécution initialement dans l'intérieur. Il doit y avoir un ensemble non vide d'objets existant au début de l'exécution du programme. Ce sont les objets déclarés avec le mot-clé objet .


0 commentaires