当前位置: 首页 > 知识库问答 >
问题:

Groovy:陷于使用可变参数设计DSL

计均
2023-03-14

我需要使用groovy chain命令设计一个DSL(领域特定语言)。

我有以下员工数据

 Name     Age    Date-Of-Joining    Salary
 Test     24     12-aug-2015        6000$

我需要创建一个DSL,就像:-

将name更新为“test1”,age更新为“26”,依此类推。

问题是:-可以更新的字段是用户定义的,即他/她可以选择,哪些列将被更新及其动态。

所以:-将薪资更新为“7000美元”也可以。

是否可以创建这样的动态dsl?如果可以,请提供一些简要信息,以便进行此类设计

我已经开发了后端系统,将更新价值。

我不知道如何从这个动态dsl中获取值

共有1个答案

楚德辉
2023-03-14

在DSL中,您应该有一些关于应该更新哪些员工记录的信息(例如,在员工表中提供主键)。

在Groovy中,您希望DSL具有的活力是完全可能的。以这个小示例为起点(这个示例不使用数据库来保持简单):

class Employee 
{
    String name
    int age
    int salary

    public String toString()
    {
        "name=${name}, age=${age}, salary=${salary}\$"
    }

    def update(String attributeName)
    {
        ['to': { Object value ->
            this[attributeName] = value
            ['and': { String nextAttrName ->
                update(nextAttrName)
            }]
        }]
    }
}

Employee emp = new Employee(name: 'Test', age: 24, salary: 6000)
println emp // name=Test, age=24, salary=6000$

emp.with
{
    update 'name' to 'John'
    println emp // name=John, age=24, salary=6000$

    update 'salary' to 7000
    println emp // name=John, age=24, salary=7000$

    update 'name' to 'Michael' and 'age' to 48
    println emp // name=Michael, age=48, salary=7000$
}

您的DSL将执行代码,因此您不会“提取”值,但DSL将调用您的后端方法。

有一个关于在Groovy中创建DSL的非常好的演示文稿:创建开发人员可以实际使用的Groovy DSL。这个演示文稿教授了很多关于DSL内部的知识。

 类似资料:
  • 问题内容: 我们过去能够通过以下方式检查参数是否可用: 要么 但这至少在Jenkins v 2.39以后不再有效。(这些函数适用于常规脚本中设置的变量,但不适用于“使用参数构建”中的参数。) 问题答案: 代替检查,您应该使用:

  • 问题内容: 该代码无法编译,编译器说f含糊。但是我认为第二种方法可以解决什么问题? 问题答案: 这是因为无法确定该方法调用是应调用变量args还是应调用float和变量args。 Java决定以这种方式来调用拓宽>装箱>变量args的方法,但是在这种情况下,两者都具有变量args。 在这种情况下,基本上将char扩展为浮动。 Java基元的扩展顺序为:

  • 5.7. 可变参数 参数数量可变的函数称为为可变参数函数。典型的例子就是fmt.Printf和类似函数。Printf首先接收一个的必备参数,之后接收任意个数的后续参数。 在声明可变参数函数时,需要在参数列表的最后一个参数类型之前加上省略符号“...”,这表示该函数会接收任意数量的该类型参数。 gopl.io/ch5/sum func sum(vals...int) int { total

  • 在第二章中,我们已经讲叙了基本的函数定义与调用方法,以及一些函数属性的作用。但 正如大多数编程语言一样,函数是如此普遍且重要的元素。因而本章继续讨论一些有关函 数的较为高级的用法。 5.1 可变参数 可变参数的意义 一般情况下,在定义函数时指定形参,在调用函数时传入实参,且参数个数必须要与定义 时指定的参数数量相等。但在一些情况下,我们将要实现的函数功能,它的参数个数可能 是不确定,或者有些参数是

  • 6. 可变参数 到目前为止我们只见过一个带有可变参数的函数printf: int printf(const char *format, ...); 以后还会见到更多这样的函数。现在我们实现一个简单的myprintf函数: 例 24.9. 用可变参数实现简单的printf函数 #include <stdio.h> #include <stdarg.h> void myprintf(const ch

  • 问题内容: 我正在为我的应用程序创建搜索表单。 用户在其中选择应该用于过滤数据的字段。 数字字段是可变的,所以我不知道SQL查询的where子句中应该有多少个。 如何在where子句中使用可变数量的条件? 谢谢 问题答案: PrepardStatements不支持可变数量的条件。一些框架所做的是将每个PreparedStatement缓存在Map中,键是查询。 因此,每次您要运行查询时,都需要构建