Dart中的Map能否存储函数?调用时报方法未定义错误如何解决
错误原因
Dart 的 Map 类型本身没有内置 mltply 成员,点语法instance.member是用来访问类自身定义的属性和方法的,不能用来读取 Map 中自定义键对应的值。你代码里的mltply是手动往 Map 里添加的自定义键,不是 Map 类原生的成员,所以运行时会抛出方法未定义的错误。
正确调用方法
要调用 Map 中存储的函数,首先需要用方括号语法[键名]取出对应的函数值,再执行调用。考虑到 Map 中可能不存在对应键导致返回null,建议加非空断言或者空安全判断:
Map<String, Function> library = { "mltply": (int x, int y) => x * y, "addtn": (int x, int y) => x + y }; // 写法1:确认键一定存在时,加非空断言直接调用 print(library['mltply']!(2, 4)); // 写法2:添加空判断,避免键不存在时抛出空异常 final mltply = library['mltply']; if (mltply != null) { print(mltply(2, 4)); }
内容的提问来源于stack exchange,提问作者bondanjody
相关产品推荐
相关产品推荐

