Quelles sont les règles précises quand vous pouvez omettre les parenthèses, les points, les accolades, = (fonctions), etc.?

Quelles sont les règles précises quand vous pouvez omettre (omettre) les parenthèses, les points, les accolades, = (fonctions), etc.?

Par exemple,

(service.findAllPresentations.get.first.votes.size) must be equalTo(2).
  • service est mon objet
  • def findAllPresentations: Option[List[Presentation]]
  • votes retourne List[Vote]
  • doit et être sont à la fois les fonctions de spécifications

Pourquoi je ne peux pas aller:

(service findAllPresentations get first votes size) must be equalTo(2)

?

L'erreur de compilation est:

"RestServicesSpecTest.c'.service.findAllPresentations
de type
L'Option[Liste[com.sharca.Présentation]]
ne prend pas de paramètres"

Pourquoi il pense que je suis en train de passer un paramètre? Pourquoi dois-je utiliser des points pour chaque appel de méthode?

Pourquoi doit (service.findAllPresentations get first votes size) être equalTo(2) résultat:

"non trouvé: valeur première"

Encore, les "doit être equalTo 2" de
(service.findAllPresentations.get.first.votes.size) doit être equalTo 2, qui est, le chaînage de méthode fonctionne bien? - objet de la chaîne chaîne chaîne param.

J'ai regardé à travers la Scala livre et le site web et ne peut pas vraiment trouver une explication complète.

Est-il en fait, comme Rob H explique dans un Débordement de Pile question Les caractères qui puis-je omettre dans Scala?, que la seule valable en cas d'utilisation de l'omission d'un le". " est pour "opérande de l'opérateur opérande" opérations de style, et pas pour le chaînage de méthode?