2017-02-25 4 views
0

背景:私はちょうど小さなテストとして、私はunixの 'tr'プログラムを実装しようとすることを決めたので、ダーツで遊んで始めました。私はコンソールで簡単なフレームワークを作成するためにステージハンドを使用しました。これは、(少なくとも、実行中の「ダーツmain.dart -h」に成功したヘルプ項目を出力します)作品、今このダーツコードスニペットで私のメソッドがカスケードしないのはなぜですか?

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); 
} 

:私がした最初のものは、引数のパッケージと、CLIオプションを取得することでした。メソッドのカスケーディングを利用しようとすると、私の問題が始まります。以下のコードは、エラーを与える:

エラー:行13 POS 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); 
} 

を参照しないかもしれませんか?それは私が見ることができない構文エラーのように簡単ですか?それは価値があるため、私はideとしてbash/viを使用しています。私はWebstormの使用を検討しましたが、フリーではないので私はできません。どんな助けがあっても私は感謝しています。

答えて

5

parser変数が完全に初期化される前に、メソッドカスケードを追加するためです。だからここでそれを参照することはできません。

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); 

...それを修正する必要があります。

関連する問題