同一Dart文件中,如何在扩展内引用同名外部max函数?
解决Dart同一文件中扩展与顶层同名函数的引用问题
针对你遇到的问题,这里提供三种无需重命名、拆分文件或复制代码的可行方案:
方案1:用匿名函数转发调用顶层函数
扩展的max是实例getter,匿名函数内部未绑定到扩展实例,直接引用max会解析为顶层函数,代码如下:
int max(int a, int b) => a > b ? a : b; extension MyIterable on Iterable<int> { int get max => isEmpty ? throw Exception('isEmpty') : reduce((a, b) => max(a, b)); }
方案2:添加库声明并使用库前缀引用
给当前文件声明库名,通过库前缀明确指向顶层的max函数:
library integers; int max(int a, int b) => a > b ? a : b; extension MyIterable on Iterable<int> { int get max => isEmpty ? throw Exception('isEmpty') : reduce(integers.max); }
方案3:顶层变量指向原函数
在顶层定义一个变量绑定原max函数,扩展中直接使用该变量规避名称冲突:
int max(int a, int b) => a > b ? a : b; final _topLevelMax = max; extension MyIterable on Iterable<int> { int get max => isEmpty ? throw Exception('isEmpty') : reduce(_topLevelMax); }
内容的提问来源于stack exchange,提问作者Martin East
相关产品推荐
相关产品推荐

