2015-08-13 3 views
1

я нашел следующий синтаксис в Скале, которые я не понимаюЧто A => А = а => среднее в Скале

object Category { 
    def id[A]: A => A = a => a 
} 

Особенно эта часть А = а => а

Кто она может быть переведена в более читаемый синтаксис

ответ

2

Это метод, который возвращает функцию, которая принимает A и возвращает другой A и функция она возвращается является identity (вы получите переменную a типа A и просто вернуть его):

scala> object Category { 
|  def id[A]: A => A = a => a 
| } 
defined module Category 

scala> Category.id[Int] 
res0: Int => Int = <function1> 

scala> res0(0) 
res2: Int = 0 

Не уверен, что вы пытаетесь достичь здесь, чтобы быть честным.

+0

Я изучаю теорему категории и нашел этот пример кода, и я просто хотел понять этот синтаксис. – Jay

9

Эта линия:

def id[A]: A => A = a => a 

определяет метод с именем id, который имеет аргумент типа A.

Возвращаемый тип метода: A => A, который является: функцией, которая принимает A и возвращает A.

Часть после =: a => a - это тело метода id. Это функция литерала для функции, которая принимает значение a и возвращает то же самое a.

Часть, о которой вы конкретно спрашиваете: A = a => a не является частью отдельно. A => A является обратным типом метода id, а a => a является телом метода. Как и любой другой метод, = между этими двумя частями отделяет объявление метода от тела метода.

Вы могли бы написать то же самое, как это:

def id[A]: Function1[A, A] = a => a 
+0

Где? А? Лямбда-выражение? – elm

+0

@elm, да, это лямбда-выражение, 'a' является аргументом выражения лямбда. – Jesper

+0

Также хорошее объяснение – Jay