Groovy如何向闭包传递多个参数?现有代码报错求解决方案
错误原因分析
- 语法错误1:
def str = {'Yash' , 'deep'}写法不合法。Groovy中{}默认是闭包字面量,你在闭包内写两个无意义的逗号分隔字符串,既没有定义集合/数组,也没有定义合法的闭包逻辑,运行时直接抛出语法异常。 - 逻辑错误2:
merged闭包没有声明接收参数的逻辑,也没有在调用时传入对应参数,无法实现多参数传递效果。
正确实现方案
方案1:闭包显式声明多个参数,调用时传入参数
package com.test.demo // 1. 定义要传入的两个字符串 def str1 = 'Yash' def str2 = 'deep' // 2. 闭包声明接收两个参数 a、b def merged = { a, b -> println "$a$b world" } // 3. 调用闭包时传入两个参数 merged.call(str1, str2) // 也可以简写为 merged(str1, str2)
运行输出:Yashdeep world
方案2:传入集合参数拆分使用
如果你的参数是存在一个集合里的,可以直接在闭包内处理集合:
package com.test.demo def strList = ['Yash', 'deep'] // 注意这里用方括号定义List,不是大括号 def merged = { List strs -> println "${strs.join('')} world" } merged(strList)
运行输出同样为Yashdeep world
方案3:使用闭包隐式参数(可读性较差,不推荐)
如果不主动声明参数,闭包默认有一个隐式参数it,可以传入数组/集合给it再拆分:
package com.test.demo def strs = ['Yash', 'deep'] def merged = { println "${it[0]}${it[1]} world" } merged(strs)
内容的提问来源于stack exchange,提问作者Yash Sanghavi
相关产品推荐
相关产品推荐

