Как Scalding DSL се превежда в обикновен Scala код?

Моля, помогнете да разберете как Scalding DSL се превежда в обикновен Scala код.

https://github.com/twitter/scalding/wiki/Fields-based-API-Reference#sortBy

Например:

val fasterBirds = birds.map('speed -> 'doubledSpeed) { speed : Int => speed * 2 }

Въпроси:

  1. Какви конвенции трябва да следвам, за да добавя мои собствени функции към Scalding map,reduce, groupBy,sort и `scanLeft?
  2. Как Scalding превежда изрази на полета като `'inpFld -> 'outFld в Scala код?
  3. Какви структури от данни/функции създава Scalding транслаторът? Къде да ги намеря в изходния код на Scalding?

Благодаря!


person DarqMoth    schedule 12.07.2014    source източник


Отговори (1)


Това Е обикновен код на Scala. Една от силните страни на Scala се крие в нейната разширяемост. Синтаксисът позволява на програмиста да разшири синтаксиса на програмите, за да създаде специфични за домейна езици. Това е особено полезно при използване на базови библиотеки.

Специфичният за домейн език на Scala не превежда толкова много, колкото ви позволява да отложите прилагането на кода до подходящия момент. Символът за отметка (') означава, че следният набор от знаци е символ, вграден тип данни. Операторът -> е синтактична захар, която може да бъде изразена по същия начин като запетая, но визуално придава концепцията за „превод“ или „от това към онова“.

Специфичният за домейн език, който разглеждате, не създава структури, въпреки че изглежда, че създава функтор. В този случай това се вижда от виртуалната машина на Java като Function1[Type,Type] екземпляр, който има apply метод, който взема неговия аргумент и връща резултат, който се изчислява от предоставения код.

person Bob Dalgleish    schedule 12.07.2014
comment
Ще помогне да видите какъв друг код е необходим, за да може val fasterBirds = birds.map('speed -> 'doubledSpeed) { speed : Int => speed * 2 } да бъде компилиран без грешки в Scala. - person DarqMoth; 12.07.2014
comment
@om-nom-nom Каква част от спецификацията на Scala се занимава с използването на знак за отметка (') за обозначаване на символ и -› оператор като синтактична захар? Къде мога да прочета за това? Благодаря! - person DarqMoth; 13.07.2014
comment
Може да се наложи да започнете от самото начало. Ето една добра отправна точка: docs.scala-lang.org /tutorials/tour/tour-of-scala.html - person Bob Dalgleish; 14.07.2014
comment
Знам основни Scala, благодаря. Питах как тази форма collection.fun('x->'g){...} се превежда в редовно извикване на функция, как се предават аргументите. Мисля, че fun трябва да е кари функция и трябва да има някакъв механизъм за предаване на аргументите като „символи“. Мисля, че някой може да даде груб пример за това, без притеснения, ще намеря сам. - person DarqMoth; 14.07.2014