如何在接收函数的方法中访问传入函数的输入参数?
问题解答
结论:当前写法无法访问inputT的值
你定义的方法签名T theMethod(T Function(T inputT) theFunction)中,inputT是**theFunction自身的参数占位符**,而非theMethod的参数。在theMethod内部,你仅持有theFunction这个函数对象,但并未触发它的执行——inputT只有在theFunction被调用时才会被传入具体值,在此之前它只是函数定义里的一个符号,不存在可访问的实际值。
为什么直接/点语法访问无效?
inputT的作用域仅限于theFunction的函数体内部,属于函数的局部参数。theMethod作为外部方法,无法穿透函数对象去访问其内部的参数占位符,这是编程语言作用域规则的基本限制,无论用哪种语法都无法实现。
可行的替代方案
如果需要基于inputT的状态决定是否执行theFunction,有两种常规实现思路:
- 方案1:将
inputT作为theMethod的独立参数传入
这是你已经知晓的方式,修改方法签名后即可直接访问inputT:T theMethod(T inputT, T Function(T inputT) theFunction) { // 直接判断inputT的状态 if (/* inputT满足条件 */) { return theFunction(inputT); } // 不满足条件时的默认逻辑 return inputT; } - 方案2:将判断逻辑封装进
theFunction
把是否执行的判断逻辑移到theFunction内部,theMethod仅负责调用函数并传入inputT:T theMethod(T Function(T inputT) theFunction) { // 从其他渠道获取要传入的inputT值 T inputT = ...; return theFunction(inputT); } // 调用时传入带判断逻辑的函数 theMethod((inputT) { if (/* inputT满足条件 */) { // 执行目标逻辑并返回结果 return processedValue; } // 不满足条件时返回原值 return inputT; });
内容的提问来源于stack exchange,提问作者Charlie Page
相关产品推荐
相关产品推荐

