此类编程行为的术语
Terminology for this type of programming behavior
我设计并实现了一种编程语言。
这种语言的一个特点是将一个函数(在示例代码中,我称之为 leftBind
)伪装成一个变量,这样任何后面的点符号都可以作为标识符传递。
编辑:这也类似于 class 的访问器方法,只是这里没有使用 class。相同的术语“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)
这对于更复杂的任务或当您想要将常用函数内联到字符串中而不需要额外的代码行乱扔程序时变得非常方便。
这种行为的术语是什么?
如果我没理解错的话,这可能是字符串插值和动态成员查找的组合:
字符串插值
例如在 Swift 中,您可以在代码中嵌入表达式:
"This is \(getAdjective(), uppercasing: true) !"
等同于
"This is ".append(getAdjective(), uppercasing: true).append(" !")
通过在 String
上定义一个 append
方法,它接受额外的参数(在本例中是 uppercasing:
布尔值)或接受不同的第一个参数,因此你可以让人们扩展这个占位符语法。
您还可以实现一个 returns 字符串的方法,这样您就可以在 \(...)
.
中使用该方法
这里的重要部分是有一个在字符串中嵌入表达式的语法,Swift 如何实现它的细节(String
上的 append
方法就是 Swift 做到了,而不是字符串插值的方式。
动态成员查找
在 Swift 中,class 可以定义一个函数,该函数在引用不作为 属性 或函数存在的成员时调用:
@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")
这就是你的想法吗?
我设计并实现了一种编程语言。
这种语言的一个特点是将一个函数(在示例代码中,我称之为 leftBind
)伪装成一个变量,这样任何后面的点符号都可以作为标识符传递。
编辑:这也类似于 class 的访问器方法,只是这里没有使用 class。相同的术语“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)
这对于更复杂的任务或当您想要将常用函数内联到字符串中而不需要额外的代码行乱扔程序时变得非常方便。
这种行为的术语是什么?
如果我没理解错的话,这可能是字符串插值和动态成员查找的组合:
字符串插值
例如在 Swift 中,您可以在代码中嵌入表达式:
"This is \(getAdjective(), uppercasing: true) !"
等同于
"This is ".append(getAdjective(), uppercasing: true).append(" !")
通过在 String
上定义一个 append
方法,它接受额外的参数(在本例中是 uppercasing:
布尔值)或接受不同的第一个参数,因此你可以让人们扩展这个占位符语法。
您还可以实现一个 returns 字符串的方法,这样您就可以在 \(...)
.
这里的重要部分是有一个在字符串中嵌入表达式的语法,Swift 如何实现它的细节(String
上的 append
方法就是 Swift 做到了,而不是字符串插值的方式。
动态成员查找
在 Swift 中,class 可以定义一个函数,该函数在引用不作为 属性 或函数存在的成员时调用:
@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")
这就是你的想法吗?