如何将炽热的DSL转换成常规的Scala代码?

如何将炽热的DSL转换成常规的Scala代码?,scala,dsl,scalding,Scala,Dsl,Scalding,请帮助了解滚烫的DSL是如何转换成常规Scala代码的 例如: val fasterBirds = birds.map('speed -> 'doubledSpeed) { speed : Int => speed * 2 } 问题: 我需要遵循哪些约定才能将自己的函数添加到滚烫的map、reduce、groupBy、sort和`scanLeft 如何将“inpFld->”等字段上的表达式转换为Scala代码 翻译器创建了哪些数据结构/功能?在滚烫的源代码中哪里可以找到它们 谢谢

请帮助了解滚烫的DSL是如何转换成常规Scala代码的

例如:

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

  • 我需要遵循哪些约定才能将自己的函数添加到滚烫的
    map、
    reduce、
    groupBy、
    sort和`scanLeft
  • 如何将“inpFld->”等字段上的表达式转换为Scala代码
  • 翻译器创建了哪些数据结构/功能?在滚烫的源代码中哪里可以找到它们
    谢谢

    这是常规的Scala代码。Scala的一个优势在于它的可扩展性。语法允许程序员扩展程序的语法以创建特定于域的语言。这在使用底层库时特别有用

    Scala的特定于域的语言不会进行太多的翻译,它允许您将代码的应用推迟到适当的时间。勾号字符(')表示以下字符集是一个内置的符号数据类型。
    ->
    运算符是一种语法糖,可以用逗号的相同方式表示,但在视觉上,它传递了“翻译”或“从这个到那个”的概念


    您正在查看的特定于域的语言不会创建结构,尽管它看起来确实创建了一个函子。在本例中,Java虚拟机将其视为一个
    Function1[Type,Type]
    实例,该实例具有一个
    apply
    方法,该方法接受其参数并返回由提供的代码计算的结果。

    这是常规Scala代码。Scala的一个优势在于它的可扩展性。语法允许程序员扩展程序的语法以创建特定于域的语言。这在使用底层库时特别有用

    Scala的特定于域的语言不会进行太多的翻译,它允许您将代码的应用推迟到适当的时间。勾号字符(')表示以下字符集是一个内置的符号数据类型。
    ->
    运算符是一种语法糖,可以用逗号的相同方式表示,但在视觉上,它传递了“翻译”或“从这个到那个”的概念


    您正在查看的特定于域的语言不会创建结构,尽管它看起来确实创建了一个函子。在这种情况下,Java虚拟机将其视为一个
    Function1[Type,Type]
    实例,该实例具有一个
    apply
    方法,该方法接受其参数并返回一个由提供的代码计算的结果。

    这将有助于查看
    val fasterBirds=birds.map('speed->'doubledSpeed)需要哪些其他代码{speed:Int=>speed*2}
    在Scala中编译时不会出现错误。@om nom nom Scala规范的哪一部分处理使用勾号(')的问题将符号和->运算符表示为语法糖?我在哪里可以了解到这一点?谢谢!您可能需要从头开始。这是一个很好的起点:我知道基本的Scala,谢谢。我问这个表单
    collection.fun('x->'g){…}
    被转换为常规函数调用,参数是如何传递的。我认为
    fun
    应该是一个curried函数,它们应该是一些将参数作为符号传递的机制。我想有人可以给出一个简单的例子,不用担心,我会找到自己。这将有助于了解
    val fasterBirds=birds.map('speed->'doubledSpeed){speed:Int=>speed*2}
    在Scala中编译时不会出现错误。@om nom nom Scala规范的哪一部分处理使用勾号(')的问题将符号和->运算符表示为语法糖?我在哪里可以了解到这一点?谢谢!您可能需要从头开始。这是一个很好的起点:我知道基本的Scala,谢谢。我问这个表单
    collection.fun('x->'g){…}
    被转换为常规函数调用,参数是如何传递的。我认为
    fun
    应该是一个curried函数,它们应该是一些将参数作为符号传递的机制。我想有人可以给出一个简单的例子,不用担心我会发现自己。