什么语言可以让我们获取定义的参数名称和传递的参数名称?
例如,我定义了一个方法:
def hello(String name) {
println("Hello " + name)
}
我想要运行时参数的名称:
def hello(String name) {
println("The name of the parameter of this method is: " + getParamName())
// getParamName() will be `name` here
}
并且,我希望获得参数的传递名称:
def hello(String name) {
println("Passed parameter name: " + getPassedName())
}
String user1 = "someone"
hello(user1)
它将打印:
Passed parameter name: user1
注意,这里是 user1,变量名!
我知道这很困难,因为 java/groovy/scala 做不到。但我认为这是一个非常有用的功能(特别是对于网络框架设计)。有一种语言可以做到吗?
For example, I defined a method:
def hello(String name) {
println("Hello " + name)
}
I want to the the name of argument in runtime:
def hello(String name) {
println("The name of the parameter of this method is: " + getParamName())
// getParamName() will be `name` here
}
And, I expect to get the passed name of the parameter:
def hello(String name) {
println("Passed parameter name: " + getPassedName())
}
String user1 = "someone"
hello(user1)
It will print:
Passed parameter name: user1
Notice, here is user1, the variable name!
I know this is difficult, since java/groovy/scala can't do it. But I think it's a very useful feature(especially for web-framework design). Is there a language can do it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
一般来说,您无法获取参数的名称,因为该参数可能不是命名变量。鉴于此:
它会在这里输出什么:
鉴于此,有些语言可以让您访问传递参数的原始 AST。 Lisp、Io 和 Ioke 中的宏都允许您定义函数,这些函数将采用一大块未计算的代码作为参数,然后您可以对其进行检查。
You can't get the name of an argument in general because the argument may not be a named variable. Given this:
What would it output here:
Given that, there are some languages that let you access the raw AST of the passed argument. Macros in Lisp, Io, and Ioke all let you define functions that will take a chunk of unevaluated code as the argument, which you can then inspect.
有 inspect 模块 以及其中的众多函数之一获取函数参数的名称和默认值。
这是使用匿名类型和反射的另一个 SO 问题的一个很好的例子 解析参数名称在运行时
这是一种使用 RegEx 在 Javascript 中执行此操作的方法(另一个 SO 问题,也提到了 Python 方式)检查参数的名称/值JavaScript 函数的定义/执行
There is the inspect module and one of the many functions there will get you the name and default value of arguments of a function.
Here's a good example from another SO question using anonymous types and reflection Resolving a parameter name at runtime
And here's a way to do it in Javascript using RegEx (another SO question, that also mentions the Python way) Inspect the names/values of arguments in the definition/execution of a JavaScript function