2014-10-08 4 views
0

Я использую Dart для создания классов контроллера в рамках проекта, используя сценарий, который я создал в каталоге инструментов. Скрипт запускается с помощью следующей команды терминала (в то время как в каталоге проекта, конечно):Интерпретация штриховки строки через скрипт запуска пула

dart tool/controller_create.dart controllerName 

Это запускает следующий сценарий и использует интерполяцию строки, чтобы ввести имя в необходимых областях, принимая первый параметр «controllerName 'из консоли будет использоваться в качестве значения для „имя“ переменной в скрипте:

import 'dart:io'; 

void main(String name) 
{ 
    String content = """ 
    part of controllers; 

    class $name extends Controller 
    { 
    //------------------------------------------------------------------------------------------- 
    // Functions 
    //------------------------------------------------------------------------------------------- 

    /** 
    * Passes parameters and initialises superclass constructor 
    */ 

    $name() : super(new VirtualDirectory(root_package_dir)) 
    { 
     virtualDirectory.allowDirectoryListing = false; 
     virtualDirectory.jailRoot = true; 
    } 

    //------------------------------------------------------------------------------------------- 
    // Functions - Controllers 
    //------------------------------------------------------------------------------------------- 

    void index (HttpRequest request) 
    { 
     virtualDirectory.serveFile(new File(views_dir + "/index.html"), request); 
    } 
    } 
    """; 

    new File('$name.dart').writeAsString(content).then((File file) 
    { 

    }); 
} 

Однако проблема я столкнулся в том, что данная строка не просто впрыснуть „controllerName“ в указанные области, а скорее «[имя_контроллера]», и мне остается интересно узнать, что вызывает это и как я могу его избежать?

Благодарим за внимание! Это первый управляемый терминалом сценарий, который я сделал, поэтому я извиняюсь, если это нормальное поведение для переданных через терминал переменных.

ответ

3

Несмотря на вашу сигнатуру метода для main, аргументы командной строки фактически передаются как List<String>. Поэтому строка-интерполяция видит список, содержащий один элемент, controllerName.

Изменить main на void main(List<String> args) и создать новое поле var name = args[0].

2

В другом ответе говорится, что основной вопрос занимает List<String> args, но вы можете делать то, что вы пытаетесь сделать, то есть отдельные параметры для каждого аргумента (в том числе для опций и флагов), например. String name, с the unscripted package.

Смежные вопросы