0

我正在使用 Dart 使用我在工具目录中创建的脚本将控制器类生成到项目框架中。该脚本使用以下终端命令运行(当然在项目目录中):

dart tool/controller_create.dart controllerName

这将运行以下脚本并使用字符串插值将名称注入必要的区域,将控制台中的第一个参数“controllerName”用作脚本中“name”变量的值:

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”注入指定区域,而是“[controllerName]”,这让我想知道是什么原因造成的,我该如何避免呢?

感谢您的阅读!这是我制作的第一个终端驱动脚本,如果这是终端传递变量的正常行为,我深表歉意。

4

2 回答 2

3

尽管您对 main 方法签名,但命令行参数实际上是作为List<String>. 因此,字符串插值会看到一个包含一个元素的列表,controllerName

将 main 更改为void main(List<String> args)并创建一个新字段var name = args[0]

于 2014-10-08T21:57:40.400 回答
2

正如另一个答案所说, main 需要List<String> args,但你可以做你想做的事情,即每个参数(包括选项和标志)的单独参数,例如String name,使用unscripted package

于 2014-10-09T15:21:16.677 回答