2015-01-28 5 views
1

Я читал о Scala с ковариантными типами возврата для функций. Но как насчет его типов аргументов? Что такое FunctionX(T1,...,R)?Какова дисперсия типов аргументов в Scala?

+2

Типы аргументов контравариантны. –

+0

Я нашел это как подходящий ответ на мой вопрос: http://stackoverflow.com/questions/4297019/scala-function-variance-and-overriding –

ответ

7

Если вы посмотрите на документацию для любого класса FunctionX, вы увидите, что тип возврата является ко-вариантом, а типы аргументов контравариантными. Например, Function2 имеет подпись:

Function2[-T1, -T2, +R] extends AnyRef 

Вы можете определить - и + до параметров типа, где - означает контравариантным и + коварианты.

Это означает, что данный

class Animal 
class Dog extends Animal 

затем

Function1[Animal, Dog] <: Function1[Dog, Dog] 
Function1[Dog, Dog] <: Function1[Dog, Animal] 

но

Function1[Dog, Animal] </: Function[Dog, Dog] 
Function1[Animal, Animal] </: Function[Animal, Dog] 

Другими словами, не функционирует обещание не меньше и не требуют не более

Смежные вопросы