2014-10-01 4 views
1

Учитывая следующее определение типа:Как работает неявное преобразование в Scala?

type Set = Int => Boolean 

я могу объявить функцию, которая возвращает набор два способа

def singletonSet(elem: Int): Set = 
    value => value == elem 

или

def singletonSet(elem: Int): Set = 
    Set(elem) 

Второе определение использует набор из Scala Стандартная библиотека, а не объявленный тип, но как Scala неявно преобразуется в объявленный тип Set? Мне нечетное преобразование кажется странным.

Для уточнения второго определения, я изменил имя типа в следующем действующем коде:

type SetX = Int => Boolean 

def singletonSet(elem: Int): SetX = 
    Set(elem) 

ответ

0

Набор имеет функцию приложения A => Boolean, которая для каждого A возвращает true, если она существует в Set или false, если она не используется (она вызывает функцию «содержит»). так, например:

val sx = Set(1,2,3) 
sx(1) // true 
sx(5) // false 

в singletonSet создании Set [Int] с одним элементом и вернуть функцию «применить».
Таким образом, singletonSet может быть определен как:

def singletonSet(elem: Int) = Set(elem).contains _ 
Смежные вопросы