Вот мой код ...Scala инфикс обозначения
val strings: Enumerator[String] = Enumerator("1","2","3","4")
//create am Enumeratee using the map method on Enumeratee
val toInt: Enumeratee[String,Int] = Enumeratee.map[String]{
(s: String) => s.toInt
}
val toSelf: Enumeratee[String,String] = Enumeratee.map[String]{
(s: String) => s
}
List("Mary", "Paul") map (_.toUpperCase) filter (_.length > 5)
val r1 = strings |>> (toSelf &>> (toInt &>> sum))
val r2 = strings |>> toSelf &>> (toInt &>> sum)
val r3 = strings |>> toSelf &>> toInt &>> sum // does not compile
val foo1 = strings &> toInt |>> sum
val foo2 = strings &> (toInt |>> sum) // does not compile
val foo3 = (strings &> toInt) |>> sum
Символы | >>, >> &. &> являются методами. Я смущен тем, как компилятор создает вокруг них круглые скобки. В строке:
List("Mary", "Paul") map (_.toUpperCase) filter (_.length > 5)
Компилятор вставив круглые скобки, как это:
((List("Mary", "Paul") map (_.toUpperCase))) filter (_.length > 5)
В действительности он компилирует к:
List("Mary", "Paul").map(((x$3: String) => x$3.toUpperCase()))(List.canBuildFrom[String]).filter(((x$4: String) => x$4.length().>(5)))
В последующем примере:
strings |>> toSelf &>> (toInt &>> sum)
Компилятор - это inserti нг скобки так:
strings |>> (toSelf &>> (toInt &>> sum))
В действительности он компилирует:
strings.|>> (toSelf.&>> (toInt.&>>(sum)))
Иногда кажется, что компилятор вставляет скобку справа налево (второй пример), а иногда кажется, компилятор вставляет скобки слева направо (первый пример). Иногда, как в
val r3 = strings |>> toSelf &>> toInt &>> sum
Я ожидаю, что это вставить скобку как
val r3 = strings |>> (toSelf &>> (toInt &>> sum))
и вместо этого я получаю ошибку компиляции.
Может кто-нибудь, пожалуйста, объясните правила вставки в скобки для методов с пробелами?
Метод '& >>' имеет более высокий приоритет, чем '| >>', а '& >>' остается ассоциативным, поэтому 'stringings >> >> toSelf & >> toInt & >> sum' интерпретируется как' strings | >> ((toSelf & >> toInt) & >> sum) '. –
@JohnReed Да, вот что я имел в виду. Похоже, я испортил круглую скобку. Исправлена. –