我对 F# 相当陌生,但一直在阅读有关工作流程和计算表达式的内容。从我完成的阅读中,我认为我至少对工作流的目的和使用工作流的语法有了基本的了解。然后,我在这里遇到了一个例子:BitWorker Workflow。
我尝试将示例代码复制到本地项目并成功运行。我开始移动一些东西并了解代码的作用,但我仍然无法理解这个工作流程的实际工作原理。我还没有看到其他示例,其中工作流程语法如下:do bitWriter stream {...而不是do workflow {....
let stream = new IO.MemoryStream()
// write TCP headers
do bitWriter stream {
do! BitWriter.WriteInt16(12345s) // source port
do! BitWriter.WriteInt16(12321s) // destination port
do! BitWriter.WriteInt32(1) // sequence number
do! BitWriter.WriteInt32(1) // ack number
do! BitWriter.WriteInt32(2, numBits = 4) // data offset
do! BitWriter.WriteInt32(0, numBits = 3) // reserved
}
Run Code Online (Sandbox Code Playgroud)
我没想到stream会成为工作流程的一部分bitWriter。这里的使用stream对工作流程意味着什么?
我用C#编写了一个小的PowerShell cmdlet,它期望使用Dictionary的参数。如何在PowerShell脚本中构造HashTable(或其他对象),以便可以将其作为参数传递给cmdlet?
我试过在PowerShell脚本中创建HashTable,如下所示:
$dic = @{
"Key1" = 1,2,3;
"Key2" = "A","B","C";
}
Run Code Online (Sandbox Code Playgroud)
然后将其通过管道传递到我的cmdlet:
$props | Add-Properties
Run Code Online (Sandbox Code Playgroud)
我的cmdlet:
public class AddProps : PSCmdlet {
[Parameter(ValueFromPipeline = true, Mandatory = true)]
public Dictionary<string, object[]> Props {get; set;}
protected override void ProcessRecord() {
DoSomethingWithProps(Props);
}
}
Run Code Online (Sandbox Code Playgroud)
我希望能够编写一个简短的PowerShell脚本,如下所示:
$dic = @{
"Key1" = 1,2,3;
"Key2" = "A","B","C";
}
$props | Add-Properties
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试这样做时,出现此错误:
输入对象不能绑定到该命令的任何参数,因为该命令不接受管道输入,或者该输入及其属性与接受管道输入的任何参数都不匹配
我检查了的类型,$props它的确是HashTable。在查看了与此管道输入问题有关的其他问题以及如何HashTable在PowerShell中进行构建之后,我仍然对这里出了什么问题不知所措。
背景:我使用了来自不同库的两种方法;一种用于参数System.Tuple<double,double>,另一种(double,double)用于参数。我发现自己无法在不做额外工作将 a 转换System.Tuple为 a 的情况下使用这两种方法(,)。
System.Tuple<t1,t2>和 和有(t1,t2)什么区别?