2016-06-27 3 views
1
object Demo { 
    def main(args: Array[String]) { 
      println(apply(layout, 10)) 
    } 

    def apply(f: Int => String, v: Int) = f(v) 

    def layout[A](x: A) = "[" + x.toString() + "]" 
} 

Я новичок в Scala и немного смущен о коде выше.Пример объяснения функции более высокого порядка scala

С моей точки зрения, apply берет другую функцию и целое число в качестве входов. И он передает целое число v для функции f в качестве входного параметра. Что здесь означает layout[A]?

ответ

2

Синтаксис

def layout[A](x:A) 

объявляет новую обобщенную функцию. В этом случае функция layout является универсальной по своему единственному параметру, поэтому вы можете вызвать layout по ЛЮБОМУ значению, и это будет законным Scala.

В Java это будет записано как метод некоторого класса, но синтаксис похож:

String layout<A>(A x) 

Twitter's Scala school has a good explanation того, как типы используются в Scala.

+0

спасибо за ссылку. –

1

Он называется параметром типа.

Если вы пишете def f(x: Int) = ...., компилятор теперь знает, что все следующие ссылки на x будут содержать некоторое целочисленное значение.

Если вы пишете def f(x: A) = ...., компилятор будет жаловаться: «A? Что такое? Я не знаю, что такое A!»

Если вы пишете def f[A](x: A) = ...., компилятор знает, что настоящий тип x будет предоставлен или может быть выведен из контекста, когда вызывается f.

+0

Я получил его сейчас. Благодаря ! –

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