我的一位同事正在将下面的 C# 转换为 F#:
string GetLatestTestResultXmlPath() =>
new DirectoryInfo(Path.Combine(projFolder, "TestResults"))
.GetDirectories()
.OrderByDescending(d => d.LastWriteTime)
.First()
.GetDirectories("Out")
.First()
.GetFiles("*.log")
.First()
.FullName
他得到的最自然的结果是:
let latestTestResultFilePath =
(new DirectoryInfo(Path.Combine(projFolder, "TestResults")))
.GetDirectories()
.OrderByDescending(fun d -> d.LastWriteTime)
.First()
.GetDirectories("Out")
.First()
.GetFiles("*.log")
.First()
.FullName
虽然这完全没问题,但他想知道他是否可以使用中缀运算符而不是后续的管道转发|>
运算符来获得一些东西。沿着这些思路:
let latestTestResultFilePath =
let directoryInfo = new DirectoryInfo(Path.Combine(projFolder, "TestResults"))
directoryInfo
|> (// magic operator here).GetDirectories()
|> (// magic operator here).OrderByDescending(fun d -> d.LastWriteTime)
|> (// magic operator here).First()
|> (// magic operator here).GetDirectories("Out")
|> (// magic operator here).First()
|> (// magic operator here).GetFiles("*.log")
|> (// magic operator here).First()
|> (// magic operator here).FullName
我也很好奇,我怀疑中缀运算符可能会这样做,但不确定哪个真正适合该角色。
这纯粹是出于好奇。