Мой коллега конвертирует 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
Мне также стало любопытно, и я подозреваю, что это может быть возможно с инфиксным оператором, способным выполнять, но не уверен, какой из них действительно может соответствовать этой роли.
Это чисто из любопытства.