Есть два стандартных способа методов призывающих:
obj.method(params) // dot notation
obj method (params) // operator notation
выше может быть изменено следующими способами:
- Если
params
является единственным параметром, вы можете заменить ()
на {}
.
- Если
params
- это единственный параметр и, вы используете служебную запись, вы можете удалить скобки.
- Если
method
не принимает параметры, вы можете отказаться от (params)
(то есть опустить пустой ()
).
- Если
method
заканчивается :
, то он фактически привязывается к в операторской нотации. То есть (params) method_: obj
эквивалентен obj.method_:(params)
.
- В любом случае, пробелы необязательны, если идентификаторы могут быть указаны отдельно. Таким образом, можно добавить пробелы к точечной нотации, например
obj . method (params)
, или написать .method(params)
на следующей строке - как это часто бывает с цепочкой вызовов, - а также удалить пробелы из операторской нотации, как в a+b
.
Есть также некоторые вещи с кортежем, но я стараюсь избегать этого, поэтому я не уверен в точном правиле.
Ничего из этого не объяснит пример, с которым вы смущены.Перед тем, как объяснить это, однако, я хотел бы показать некоторые синтаксический сахар, которые также могут быть использованы для вызова методов:
obj(params) // equivalent to obj.apply(params)
obj.x = y // equivalent to obj.x_=(y), if obj.x also exists
obj(x) = y // equivalent to obj.update(x, y)
obj op= y // equivalent to obj = obj op y, if op is symbolic
~obj // equivalent to obj.unary_~; also for !, + and -, but no other symbol
Хорошо, теперь к примеру, вы дали. Можно указать импорт членов стабильных значений. Java может сделать это для статических методов со своим статическим импортом, но Scala имеет более общий механизм: импорт из пакетов, объектов или общих экземпляров ничем не отличается: он включает как членов типа, так и членов значения. Методы относятся к последней категории.
Итак, представьте, что у вас есть val a = 2
, и вы делаете import a._
. Это позволит охватить все методы Int
, поэтому вы можете напрямую их вызвать. Вы не можете сделать +(2)
, потому что будет истолковано как призыв к unary_+
, но вы могли бы назвать *(4)
, например:
scala> val a = 2
a: Int = 2
scala> import a._
import a._
scala> *(4)
res16: Int = 8
Теперь, вот правило. Вы можете позвонить
method(params)
Если:
method
был импортирован в область видимости.
- Вы держите скобки (даже если есть только один параметр)
Обратите внимание, что есть проблема старшинства, а также. Если вы напишете obj method(params)
, Scala предположим, что method
относится к obj
, даже если он был импортирован в область.
Да, это закрытие. вы передаете блок кода в метод. Обратите внимание, что в Scala вы можете использовать {} вместо() для передачи одного параметра методам – aishwarya
Что вас беспокоит? Это блок кода ('{...}') после имени метода или тот факт, что мы не префикс метода с именем объекта/класса? – Nicolas