2015-03-29 3 views
2

Я пытаюсь понять пользовательский Iterator в Scala, написанный другим программистом. У меня возникли проблемы с пониманием деклараций функций. Они кажутся мне анонимными функциями, но я просто не могу полностью окутать их в них.Scala: понимание синтаксиса анонимных функций

Я читал об анонимных функциях в Scala, и нашел этот ресурс [http://www.scala-lang.org/old/node/133] полезным, но я до сих пор не могу прочитать приведенные выше функции и полностью понять их.

Вот код:

class MyCustomIterator(somePath: Path, someInt: Int, aMaxNumber: Int) { 
     def customFilter:(Path) => Boolean = (p) => true 
     // Path is from java.nio.files.Path 
     def doSomethingWithPath:(Path) => Path = (p) => p 
} 

Я хотел бы понять это понимать эти функции. Каков тип возврата на самом деле? Что является телом функции?

.

ответ

5

(Для первых def) Детали после двоеточия и знак равенства - это тип возврата. Таким образом, возвращаемый тип:

Path => Boolean 

Что обозначает подпись функции.

Теперь, нарушая это, элемент слева от стрелки является параметром функции. Правая часть - это возвращаемый тип функции.

Итак, он возвращает функцию, которая принимает Path и возвращает Boolean. В этом случае он возвращает функцию, которая принимает Path и возвращает true независимо от того, что.

Второй def возвращает функцию, которая принимает Path и возвращает другой Path (тот же Path в данном случае)

Пример использования будет использовать их следующим образом:

Первый метод:

iter.customFilter(myPath) //returns true 

или

val pathFunction = iter.customFilter; 
pathFunction(myPath) //returns true 

Второй метод:

iter.doSomethingWithPath(myPath) //returns myPath 

или

val pathFunction = iter.doSomethingWithPath 
pathFunction(myPath) //returns myPath 
+0

удалось добавить, больше обычного, чтобы увидеть определение функции customFilter: Path => Boolean = _ => true' и определение функции doSomethingWithPath: Path => Path = identity'. Легче ли читать? –

+0

Джастин, мне нравятся ваши объяснения. Однако позвольте мне полностью понять мое мнение: «Элемент слева от стрелки - это параметры функции». - Это «Boolean = (p) => true». Если это так, как мы интерпретируем это синтаксис. – user3825558

+0

@ som-snytt, что легче читать. Путь - это тип возвращаемого значения, и эта вещь «Boolean = _ => true» является возвращаемым типом? Что такое символ подчеркивания? Я чувствую себя как заполнитель. И что вы имели в виду: Path = identity Я не могу получить часть Identity. – user3825558

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