Scala в примерах: различия между версиями
Содержимое удалено Содержимое добавлено
Annayudi (обсуждение | вклад) →Анонимные функции: — добавлен перевод |
Annayudi (обсуждение | вклад) |
||
Строка 1080:
</syntaxhighlight></font>
Помимо <tt>Function1</tt> есть также определения для функций любой другой арности (нынешняя реализация устанавливает некий разумный предел). То есть, для любого возможного числа параметров есть соответствующее определение. Синтаксис типа функции в Scala
Scala использует одинаковый синтаксис ''f(x)'' для применения функции, вне зависимости от того, является ли ''f'' методом или функциональным объектом. Это возможно из-за следующей конвенции: применение функции ''f(x)'', где ''f'' — объект (в противоположность методу) это укороченная запись для ''f''.<tt>apply</tt>(''
Поэтому мы определяли операцию взятия элемента из массива в [[Scala в примерах#Аннотации вариантности|
Функции — это пример того, как полезны объявления контравариантных типовых параметров. Рассмотрим, например, следующий код:
Строка 1094:
</syntaxhighlight></font>
Присваивать значение <tt>g</tt> типа <tt>String => Int</tt> величине <tt>f</tt> типа <tt>AnyRef => Int</tt> — корректно. Действительно, все, что можно сделать с функцией типа <tt>String => Int</tt> — это передать ей строку, чтобы получить целое число. Очевидно, что то же самое верно для функции <tt>f</tt>: если мы передадим ей строку (или любой другой объект), мы получим целое число. Это показывает, что подтипирование функций контравариантно по типу аргумента, тогда как оно ковариантно по типу результата. Короче говоря,
'''Пример 8.6.1''' Рассмотрим код:
|