【问题标题】:Terminology for this type of programming behavior此类编程行为的术语
【发布时间】:2020-02-24 17:14:18
【问题描述】:

我已经设计并实现了一种编程语言。

这种语言的一个特点是将一个函数(在示例代码中,我称之为leftBind)伪装成一个变量,这样后面的任何点符号都会作为标识符传递。

编辑:这也类似于类的访问器方法,只是这里没有使用类。相同的术语“getter”或“accessor”是否适用于此?

这种语言的目的是提供一个功能齐全的语言,但被监禁的环境,允许项目的复杂配置,但保护项目免受整个未经授权的行为。

一个例子:

/*leftbind aliases the identifier “sql” to the  function “quote”
It is called leftBind, since it’s binding the left side of the parse tree to a function*/ 
leftBind(“sql”, “quote”); 
q=“select * from foo where user=$sql.user”; // equivalent to quote(user)

这对于更复杂的任务或当您想将常用函数内联到字符串中而不需要额外的代码行时非常方便。

这种行为的术语是什么?

【问题讨论】:

    标签: compiler-construction terminology software-design language-design


    【解决方案1】:

    如果我理解正确,这可能是字符串插值和动态成员查找的组合:

    字符串插值

    例如在 Swift 中,您可以在代码中嵌入表达式:

    "This is \(getAdjective(), uppercasing: true) !"
    

    等价于

    "This is ".append(getAdjective(), uppercasing: true).append(" !")
    

    通过在 String 上定义一个 append 方法,该方法接受额外的参数(在本例中为 uppercasing: 布尔值)或接受不同的第一个参数,因此您可以让人们扩展这个占位符语法。

    您还可以实现一个返回字符串的方法,这样您就可以在\(...) 中使用该方法。

    这里的重要部分是在字符串中嵌入表达式的语法,以及 Swift 如何实现它的详细信息(String 上的append 方法只是 Swift 的实现方式,而不是字符串插值的方式。

    动态成员查找

    在 Swift 中,一个类可以定义一个函数,当引用一个不作为属性或函数存在的成员时调用该函数:

    @dynamicMemberLookup class MyClass {
        var dictionary: [String: String]
        subscript(dynamicMember: String) -> String {
            return dictionary[dynamicMember] ?? ""
        }
    }
    

    这让您可以动态地组成自己的变量。当你写

    let foo = MyClass()
    let myString = foo.bar
    

    编译器基本上只是生成代码

    let foo = MyClass()
    let myString = foo.subscript(dynamicMember: "bar")
    

    这就是你的想法吗?

    【讨论】:

    • 是的。实际上,这非常接近。我需要一种方便的方式来访问字符串中的给定方法,而且还需要访问编译器无法访问的变量。它旨在融入现有软件。它在主程序中有自己的内存空间。但我希望它以只读方式访问“外部”。示例: a= readonly(“argv”) ;引用=引用(a); readonly 别名为 ro。引用 sql 的别名。然后写一个字符串“select * from foo where bar=$sql.ro.argv[0]”或“select ...”+sql.ro.argv[0]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    相关资源
    最近更新 更多