Scala в примерах: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 1405:
Помимо <tt>Function1</tt> есть также определения для функций любой другой арности (нынешняя реализация устанавливает некий разумный предел). То есть, для любого возможного числа параметров есть соответствующее определение. Синтаксис типа функции в Scala <tt>(T<sub>1</sub>, …, T<sub>n</sub>) => S</tt> — это просто сокращение для параметризованого типа <tt>Function''n''[T<sub>1</sub>, …, T<sub>n</sub>, S]</tt>.
 
Scala использует одинаковый синтаксис ''f(x)'' для применения функции, вне зависимости от того, является ли ''f'' методом или функциональным объектом. Это возможно из-заблагодаря следующейследующему конвенциисоглашению: применение функции ''f(x)'', где ''f'' — объект (в противоположность методу) это укороченнаясокращенная записьформа записи для ''f''.<tt>apply</tt>(''x''). Метод <tt>apply</tt>, принадлежащий типу функций, вставляется автоматически везде, где это необходимо.
 
Поэтому мы определяли операцию взятия элемента из массива в [[Scala в примерах#Аннотации вариантности|Параграфе 8.2]] при помощи метода <tt>apply</tt>. Для любого масивамассива <tt>a</tt> операция взятия элемента <tt>a(i)</tt> это укороченнаясокращенная записьформа записи <tt>a.apply(i)</tt>.
 
Функции — это пример того, как полезны объявления контравариантных типовых параметров. Рассмотрим, например, следующий код: