gpt4 book ai didi

function - Groovy - 检查 param 是否是一个函数

转载 作者:行者123 更新时间:2023-12-04 16:50:42 25 4
gpt4 key购买 nike

在 JavaScript 中,这就是我检查函数参数是否为函数的方式:

function foo ( p ) {
if ( typeof p === 'function' ) {
p();
}
// ....
}

我如何在 Groovy 中做同样的事情?

最佳答案

Groovy 使 closures一等公民。每个闭包都扩展抽象类 groovy.lang.Closure<V> 如果未定义参数类型,您可以使用 instanceof检查传递给方法的参数是否为闭包。类似的东西:

def closure = {
println "Hello!"
}

def foo(p) {
if (p instanceof Closure) {
p()
}
}

foo(closure)

运行此脚本生成输出:
Hello!

使用具体参数类型

Groovy 允许您(实际上值得这样做)定义方法参数的类型。而不是检查 p是一个闭包,你可以要求调用者传递一个闭包。考虑以下示例:
def closure = {
println "Hello!"
}

def foo2(Closure cl) {
cl()
}

foo2(closure)
foo2("I'm not a closure")

第一次调用将执行闭包的操作(打印“Hello!”),但第二次调用将引发异常:
Hello!
Caught: groovy.lang.MissingMethodException: No signature of method: test.foo2() is applicable for argument types: (java.lang.String) values: [I'm not a closure]
Possible solutions: foo2(groovy.lang.Closure), foo(java.lang.Object), find(), find(groovy.lang.Closure), wait(), run()
groovy.lang.MissingMethodException: No signature of method: test.foo2() is applicable for argument types: (java.lang.String) values: [I'm not a closure]
Possible solutions: foo2(groovy.lang.Closure), foo(java.lang.Object), find(), find(groovy.lang.Closure), wait(), run()
at test.run(test.groovy:18)

使您的代码类型安全始终是一个好习惯,因此您不必担心作为参数传递的值是否是您期望的类型。

关于function - Groovy - 检查 param 是否是一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48320253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com