Skip to content

Commit

Permalink
Fix docs.
Browse files Browse the repository at this point in the history
  • Loading branch information
walterlv committed Nov 11, 2019
1 parent a3efa66 commit ffa8d39
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 10 deletions.
25 changes: 17 additions & 8 deletions docs/zh-chs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ $ demo.exe "C:/Users/lvyi/Desktop/demo.txt" -s --mode Edit --startup-sessions A

以上不同风格不能混合使用。

对于 bool 类型的属性,在命令行中既可以在选项后传入 `true` / `True` / `false` / `False` 也可以不传。如果不传,则表示 `true`
对于 bool 类型的属性,在命令行中既可以在选项后传入 `true` / `True` / `false` / `False` 也可以不传。如果不传,则表示 `true`举例来说,`-s true``-s True``-s` 都是等价的。

另外,`ValueAttribute``OptionAttribute` 可以出现在同一个属性上。这时如果发现了不带选项的值,将填充到 `ValueAttribute` 的属性上;而一旦之后发现了此 `OptionsAttribute` 指定的短名称或者长名称,会将新的值覆盖再次设置到此属性上。

Expand All @@ -87,6 +87,8 @@ $ demo.exe "C:/Users/lvyi/Desktop/demo.txt" -s --mode Edit --startup-sessions A
public string FilePath { get; }
```

在这段例子中,`demo.exe xxx.txt``demo.exe -f xxx.txt``demo.exe --file xxx.txt` 都会将 `xxx.txt` 赋值给 `FilePath` 这个属性。

## 需要注意

在命令行中输入参数时,无论哪种风格,命令行都是区分大小写的。对于选项(`-``/` 或者 `--` 开头)如果大小写错误,此选项和后面附带的值都将被忽略;对于值(不带 `-` 或者 `/` 开头),值将按照命令行中的原生大小写传入 `Options` 类型的实例中。
Expand All @@ -97,13 +99,16 @@ public string FilePath { get; }

你可以为你的命令行参数指定谓词,每一种谓词都可以有自己的一组独特的参数类型。

谓词的用法如 `git commit``git add` 一样,其中的 `commit``add` 将作为命令行的命令分支逻辑标识,对于命令行谓词之后的参数将会填充到不同的谓词对应的类型。

```csharp
const int defaultExitCode = 0;
var commandLine = CommandLine.Parse(args);
commandLine.AddHandler<EditOptions>(options => 0)
commandLine.AddHandler<EditOptions>(options => defaultExitCode)
.AddHandler<PrintOptions>(options => 0).Run();
```

`EditOptions``PrintOptions` 的定义如下,区别在于类型标记了谓词
`EditOptions``PrintOptions` 的定义如下,区别在于通过 Verb 特性标记了谓词

```csharp
[Verb("Edit")]
Expand All @@ -120,6 +125,8 @@ public class PrintOptions
}
```

谓词的用法如 `git commit` 一样,将作为命令行的命令分支逻辑标识。如以上代码可使用 `demo.exe edit -f xx.txt``demo.exe print -f xx.txt -p xx` 分别调用 `EditOptions``PrintOptions` 对应逻辑。

你也可以在 `Handle` 中使用不标谓词的参数类型,但是这样的参数最多只允许有一个,会作为没有任何谓词匹配上时使用的默认参数类型。

另外,`Handle` 方法有对应的 `HandleAsync` 异步版本,用于处理异步的任务。
Expand Down Expand Up @@ -246,7 +253,7 @@ public class SelfWrittenShareOptionsParser : CommandLineOptionParser<Options>
请注意,解析 URL 有如下限制:

1. 你的 `Options` 类型中所有的 `ValueAttribute` 都将无法被赋值;
1. 你的 `Options` 类型中不允许出现标记有 `OptionAttribute` 的字符串集合属性。
1. 你的 `Options` 类型中不允许出现标记有 `OptionAttribute` 的字符串集合属性(即 `OptionAttribute` 标记的属性类型不能是 `IList<string>` 等类型)

另外,URL 解析中的选项名称也是大小写敏感的。当你在 `Options` 类型中正确使用 PascalCase 风格定义了选项的长名称后,你在 URL 中既可以使用 PascalCase 风格也可以使用 camelCase 风格。

Expand All @@ -272,6 +279,8 @@ public class SelfWrittenShareOptionsParser : CommandLineOptionParser<Options>

总结来说:完成一次解析只需要 1091ns,也就是大约 10 tick。

其中,s 是秒,ns 是纳秒。换算关系为 1s = 1,000,000,000 ns。

说明:

- NoArgs 表示没有传入参数
Expand All @@ -280,7 +289,7 @@ public class SelfWrittenShareOptionsParser : CommandLineOptionParser<Options>
- Handle 表示进行多谓词匹配
- CommandLineParser 是使用的 CommandLineParser 库作为对照
- 测试使用的参数:
- Windows 风格:`"C:\Users\lvyi\Desktop\重命名试验.enbx" -Cloud -Iwb -m Display -s -p Outside -StartupSession 89EA9D26-6464-4E71-BD04-AA6516063D83`
- Cmd 风格:`"C:\Users\lvyi\Desktop\重命名试验.enbx" /Cloud /Iwb /m Display /s /p Outside /StartupSession 89EA9D26-6464-4E71-BD04-AA6516063D83`
- Linux 风格:`"C:\Users\lvyi\Desktop\重命名试验.enbx" --cloud --iwb -m Display -s -p Outside --startup-session 89EA9D26-6464-4E71-BD04-AA6516063D83`
- Url 风格:`walterlv://open/?file=C:\Users\lvyi\Desktop\%E9%87%8D%E5%91%BD%E5%90%8D%E8%AF%95%E9%AA%8C.enbx&cloud=true&iwb=true&silence=true&placement=Outside&startupSession=89EA9D26-6464-4E71-BD04-AA6516063D83`
- Windows 风格:`"C:\Users\lvyi\Desktop\文件.txt" -Cloud -Iwb -m Display -s -p Outside -StartupSession 89EA9D26-6464-4E71-BD04-AA6516063D83`
- Cmd 风格:`"C:\Users\lvyi\Desktop\文件.txt" /Cloud /Iwb /m Display /s /p Outside /StartupSession 89EA9D26-6464-4E71-BD04-AA6516063D83`
- Linux 风格:`"C:\Users\lvyi\Desktop\文件.txt" --cloud --iwb -m Display -s -p Outside --startup-session 89EA9D26-6464-4E71-BD04-AA6516063D83`
- Url 风格:`walterlv://open/?file=C:\Users\lvyi\Desktop\%E6%96%87%E4%BB%B6.txt&cloud=true&iwb=true&silence=true&placement=Outside&startupSession=89EA9D26-6464-4E71-BD04-AA6516063D83`
4 changes: 2 additions & 2 deletions tests/dotnetCampus.CommandLine.Tests/Fakes/CommandLineArgs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
internal static class CommandLineArgs
{
internal const string UrlProtocol = "walterlv";
internal const string FileValue = @"C:\Users\lvyi\Desktop\重命名试验.txt";
internal const string FileValue = @"C:\Users\lvyi\Desktop\文件.txt";
internal const bool CloudValue = true;
internal const bool IwbValue = true;
internal const string ModeValue = "Display";
Expand Down Expand Up @@ -57,7 +57,7 @@ internal static class CommandLineArgs

internal static readonly string[] UrlArgs =
{
@"walterlv://open/?file=C:\Users\lvyi\Desktop\%E9%87%8D%E5%91%BD%E5%90%8D%E8%AF%95%E9%AA%8C.txt&cloud=true&iwb=true&mode=Display&silence=true&placement=Outside&startupSession=89EA9D26-6464-4E71-BD04-AA6516063D83",
@"walterlv://open/?file=C:\Users\lvyi\Desktop\%E6%96%87%E4%BB%B6.txt&cloud=true&iwb=true&mode=Display&silence=true&placement=Outside&startupSession=89EA9D26-6464-4E71-BD04-AA6516063D83",
};

internal static readonly string[] EditVerbArgs =
Expand Down

0 comments on commit ffa8d39

Please sign in to comment.