Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的方法级联在这个dart代码段中不起作用?_Dart - Fatal编程技术网

为什么我的方法级联在这个dart代码段中不起作用?

为什么我的方法级联在这个dart代码段中不起作用?,dart,Dart,背景:所以我刚开始玩dart,作为一个小测试,我决定尝试实现unix“tr”程序。我使用stagehand创建了一个控制台简单框架。我做的第一件事是使用args包获取cli选项: import 'dart:io'; import 'package:args/args.dart'; import 'package:translate/translate.dart' as translate; ArgResults input; main(List<String> arguments

背景:所以我刚开始玩dart,作为一个小测试,我决定尝试实现unix“tr”程序。我使用stagehand创建了一个控制台简单框架。我做的第一件事是使用args包获取cli选项:

import 'dart:io';
import 'package:args/args.dart';
import 'package:translate/translate.dart' as translate;

ArgResults input;

main(List<String> arguments) {

  var parser = new ArgParser();
    parser.addFlag("complement",
                   help: "complement the strings",
                   negatable: false,
                   abbr: "c");
    parser.addFlag("delete",
                   help: "delete the selected strings",
                   negatable: false,
                   abbr: "d");
    parser.addFlag("help",
                   help: "display this help screen",
                   negatable: false,
                   abbr: "h",
                   callback: (help) => print(parser.usage));
    parser.addFlag("squeeze-repeats",
                   help: "squeeze repeats",
                   negatable: false,
                   abbr: "s");
    parser.addFlag("truncate",
                   help: "truncate strings",
                   negatable: false,
                   abbr: "t");
    parser.addFlag("version",
                   help: "display version info",
                   negatable: false,
                   abbr: "v");

  input = parser.parse(arguments);
}
导入'dart:io';
导入“包:args/args.dart”;
导入“package:translate/translate.dart”作为翻译;
结果输入;
主(列表参数){
var parser=新的ArgParser();
addFlag(“补码”,
帮助:“补充字符串”,
可否定:错误,
缩写:“c”);
addFlag(“删除”,
帮助:“删除所选字符串”,
可否定:错误,
缩写:“d”);
addFlag(“帮助”,
帮助:“显示此帮助屏幕”,
可否定:错误,
缩写:“h”,
回调:(help)=>print(parser.usage));
addFlag(“挤压重复”,
帮助:“挤压重复”,
可否定:错误,
缩写:“s”);
addFlag(“truncate”,
帮助:“截断字符串”,
可否定:错误,
缩写:“t”);
addFlag(“版本”,
帮助:“显示版本信息”,
可否定:错误,
缩写:“v”);
输入=parser.parse(参数);
}
现在,这就行了(至少,运行“dart main.dart-h”将成功打印出帮助项)。当我尝试使用方法级联时,我的问题就开始了。下面的代码给出了错误:

错误:第13行第7位:“解析器”的初始值设定项可能未引用自身

import 'dart:io';
import 'package:args/args.dart';
import 'package:translate/translate.dart' as translate;

ArgResults input;

main(List<String> arguments) {

  var parser = new ArgParser()
    ..addFlag("complement",
              help: "complement the strings",
              negatable: false,
              abbr: "c")
    ..addFlag("delete",
              help: "delete the selected strings",
              negatable: false,
              abbr: "d")
    ..addFlag("help",
              help: "display this help screen",
              negatable: false,
              abbr: "h",
              callback: (help) => print(parser.usage))
    ..addFlag("squeeze-repeats",
              help: "squeeze repeats",
              negatable: false,
              abbr: "s")
    ..addFlag("truncate",
              help: "truncate strings",
              negatable: false,
              abbr: "t")
    ..addFlag("version",
              help: "display version info",
              negatable: false,
              abbr: "v");

  input = parser.parse(arguments);
}
导入'dart:io';
导入“包:args/args.dart”;
导入“package:translate/translate.dart”作为翻译;
结果输入;
主(列表参数){
var parser=新的ArgParser()
…addFlag(“补码”,
帮助:“补充字符串”,
可否定:错误,
缩写:“c”)
…添加标志(“删除”,
帮助:“删除所选字符串”,
可否定:错误,
缩写:“d”)
…addFlag(“帮助”,
帮助:“显示此帮助屏幕”,
可否定:错误,
缩写:“h”,
回调:(help)=>print(parser.usage))
..addFlag(“挤压重复”,
帮助:“挤压重复”,
可否定:错误,
缩写:“s”)
..addFlag(“截断”,
帮助:“截断字符串”,
可否定:错误,
缩写:“t”)
…addFlag(“版本”,
帮助:“显示版本信息”,
可否定:错误,
缩写:“v”);
输入=parser.parse(参数);
}

问题是我做错了什么?它是否像我看不到的语法错误那样简单?值得一提的是,我使用bash/vi作为我的ide,我曾短暂考虑过使用webstorm,但由于它不是免费的,所以我不能这么做。非常感谢您提供的帮助。

因为您是在
解析器
变量完全初始化之前添加方法级联的。所以你不能在这里引用它

callback: (help) => print(parser.usage))
                          ^
将其更改为

var parser = new ArgParser();
parser
  ..addFlag("complement",
          help: "complement the strings",
          negatable: false,
          abbr: "c")
  ..addFlag("delete",
          help: "delete the selected strings",
          negatable: false,
          abbr: "d")
  ..addFlag("help",
          help: "display this help screen",
          negatable: false,
          abbr: "h",
          callback: (help) => print(parser.usage))
  ..addFlag("squeeze-repeats",
          help: "squeeze repeats",
          negatable: false,
          abbr: "s")
  ..addFlag("truncate",
          help: "truncate strings",
          negatable: false,
          abbr: "t")
  ..addFlag("version",
          help: "display version info",
          negatable: false,
          abbr: "v");

input = parser.parse(arguments);

…应该修复它。

因为您要在
解析器
变量完全初始化之前添加方法级联。所以你不能在这里引用它

callback: (help) => print(parser.usage))
                          ^
将其更改为

var parser = new ArgParser();
parser
  ..addFlag("complement",
          help: "complement the strings",
          negatable: false,
          abbr: "c")
  ..addFlag("delete",
          help: "delete the selected strings",
          negatable: false,
          abbr: "d")
  ..addFlag("help",
          help: "display this help screen",
          negatable: false,
          abbr: "h",
          callback: (help) => print(parser.usage))
  ..addFlag("squeeze-repeats",
          help: "squeeze repeats",
          negatable: false,
          abbr: "s")
  ..addFlag("truncate",
          help: "truncate strings",
          negatable: false,
          abbr: "t")
  ..addFlag("version",
          help: "display version info",
          negatable: false,
          abbr: "v");

input = parser.parse(arguments);
…应该解决它