如何在 F# 的同一行获取 Json 元素的字符串值

How to get the String Value of a Json element on the Same line in F#

我有一些代码想放在同一行而不是有单独的变量(也许是管道?)

    let! creditText = row.EvalOnSelectorAsync("div.moneyout","node => node.innerText") |> Async.AwaitTask
    let JSonElementString = creditText.Value.GetString()

我想要这样的东西:

let! creditText = row.EvalOnSelectorAsync("div.moneyout","node => node.innerText") |> Async.AwaitTask |> (fun js -> js.Value.GetString)

我可以看到发生了什么 - 在函数点,变量仍然是异步的。我怎样才能让它通过管道将结果传递给同一行上的函数?

我不明白你为什么要这样做。当代码写成两行时,代码可读性和简洁性都很好。把它压缩成一行只会让它更难理解。

就是说,如果您想这样做,最好的选择是对 Async<T>Task<T> 进行 map 操作。这存在于各种库中,但您也可以轻松地自己定义它:

module Async = 
  let map f a = async { 
    let! r = a
    return f a }

使用这个,你现在可以写:

let! creditText = 
  row.EvalOnSelectorAsync("div.moneyout","node => node.innerText") 
  |> Async.AwaitTask 
  |> Async.map (fun creditText -> creditText.Value.GetString())

但正如我上面所说,我认为这是个坏主意,你的两行版本更好。