Fsharp / FAKE中的双重感叹号(!!)是什么?

时间:2017-10-25 12:55:41

标签: f# f#-fake

我遇到过以下代码,无法理解双感叹号提供的操作。此代码snipet来自CICD系统中使用的FAKE脚本。 Microsoft's Symbol and Operator Reference未列出此运算符,也无法在FAKE's API Reference中找到它。

  !! (projectPackagePath + "/*.zip")
    |> Seq.iter(fun path ->
      trace ("Removing " + path)
      ShellExec tfCommand ("delete " + path + " /noprompt")

另一个使用示例

let buildLabelFiles = 
    !!(labelPath @@ "*.txt")

1 个答案:

答案 0 :(得分:8)

private void SortByColumns(object sender, RoutedEventArgs e) { GridViewColumnHeader column = (sender as GridViewColumnHeader); string sortBy = column.Tag.ToString(); if (listViewSortCol != null) { AdornerLayer.GetAdornerLayer(listViewSortCol).Remove(listViewSortAdorner); siteListView.Items.SortDescriptions.Clear(); } ListSortDirection newDir = ListSortDirection.Ascending; if (listViewSortCol == column /*&& listViewSortAdorner.Direction == newDir*/) newDir = ListSortDirection.Descending; listViewSortCol = column; listViewSortAdorner = new SortAdorner(listViewSortCol, newDir); AdornerLayer.GetAdornerLayer(listViewSortCol).Add(listViewSortAdorner); ListCollectionView lvi = CollectionViewSource.GetDefaultView(siteListView.ItemsSource) as ListCollectionView; if (lvi != null) { lvi.CustomSort = new StringComparer<MyTuple>(sortBy, newDir); } else siteListView.Items.SortDescriptions.Add(new SortDescription(sortBy, newDir)); } 运算符采用文件模式并返回与模式匹配的文件集合。

例如,如果要打印当前文件夹中的所有文本文件,可以写:

var isReal: Bool?
String("Value is \(isReal ?? "nil")")

如果您在源代码中查看the operator definition,您会发现它只是创建!!值的别名(请参阅type definition),其中包含由指定的模式。 for file in !! "*.txt" do printfn "%s" file 类型实现IGlobbingPattern,因此您可以迭代文件,但您可以使用IGlobbingPattern执行其他一些操作,例如使用IEnumerable组合两个文件集或使用IGlobbingPattern从文件集中删除一些文件。