Что означает «<:« Предполагается, что это означает в квадратных скобках?
<:
означает подтип в Скале, так что здесь это означает, что A
является подтипом Product
. Он действует как своего рода верхней границы, которая ограничивает тип, который может быть передан здесь, чтобы быть подтипом Product
Аре А и В должен быть параметр типа? Но колонка аргумент типа
A
не тип параметра, это показатель сам по себе, который называется параметром типа. Это немного запутанно, но в основном это означает, что вы можете передать любой тип, являющийся подтипом product
, в эту позицию и использовать параметр типа внутри функции. Это делает функцию более общей, поскольку она может обрабатывать разные типы одновременно, и вам не нужно писать отдельные функции для разных типов;
это выглядит, как он делает функцию лямбда из (Row) до Traversable [А]
f: (row) => Traversable[A]
является еще одним параметром, который в данном случае представляет собой тип функции, которая принимает (row)
и вернуть Traversable[A]
. По этому определению explode
может принимать функцию как параметр, в этом случае это лямбда-выражение;
Чтобы проиллюстрировать последний случай:
def sum(x: Int, y: Int)(f: Int => Int) = f(x) + f(y)
sum: (x: Int, y: Int)(f: Int => Int)Int
sum(2,3)(x => 2*x)
res2: Int = 10
В заключении, функция взрывается принимает три параметра, в общей сложности, первый A
является параметром типа. Второй и третий являются действительными аргументами функции, причем Input
имеет тип Column
, как вы заметили, и f
, тип (row) => Traversable[A]
, который является типом функции.
Действительно ли функция f всегда должна находиться в другом наборе круглых скобок, когда вы определяете параметры «обычных» типов и параметр типа функции? Будет ли он когда-либо выглядеть примерно так: a: Int, b: Int, f: (Int) => Int) или он будет выглядеть как (a: Int, b: Int, (f: (Int) => (Int)))? Спасибо и извините насчет запутанного «B» haha –
Это не должно быть так, как вы можете проверить в scala REPL.Оба '(a: Int, b: Int, f: Int => Int)' и '(a: Int, b: Int) (f: Int => Int)' работают, но вы должны называть их тем же как вы их определяете. Последний позволяет вам передавать параметры в два этапа, что иногда дает вам преимущества. – Psidom