You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart中能否同时使用可选位置参数与命名参数?

Dart可选位置参数与命名参数的使用问题

你的假设不正确,Dart完全允许同时使用可选位置参数和命名参数,核心规则是:可选位置参数必须放在命名参数之前。

你的代码报错原因

你写的函数定义逻辑没问题,但报错大概率是以下细节问题:

  • 检查LogType枚举是否已正确定义,未定义的自定义类型会导致解析错误,触发类似“Expected to find ')'”的提示;
  • 部分旧版Dart编辑器可能对可选位置参数与命名参数之间的逗号敏感,尝试去掉[Object? s2 = '']后面的逗号再试。

无需将第二个字符串设为命名参数的解决方案

直接修正函数定义即可实现你想要的调用方式,完整可运行代码如下:

// 先确保LogType枚举已定义(如果之前没定义的话)
enum LogType { misc, debug, error }

// 假设全局变量已初始化
int lowestDisplayedPriority = 1;
Set<LogType> activeLogs = {LogType.misc};

void log(Object? s, [Object? s2 = ''], {int priority = 1, LogType logType = LogType.misc, bool on = true}){
  if (priority >= lowestDisplayedPriority && activeLogs.contains(logType) && on){
    print('=' + s.toString());
    if(s2 != ''){
      print('=' + s2.toString());
    }  
  }
}

// 调用示例,完全符合你的需求
void main() {
  log('A', 'B', priority: 2);
  log('A', priority: 2);
}

这样你就能按log(A,B, priority: 2)或log(A, priority: 2)的方式调用函数,无需将第二个字符串设为命名参数。

内容的提问来源于stack exchange,提问作者Tim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 07:13:20