F# 正在进行的打印fn
所以我有一个函数solveQuasion,它返回一对float*float[]。打印数字和阵列并继续使用阵列的最佳方式是什么?我编写了以下代码,但似乎有更好的方法F# 正在进行的打印fn,f#,pipeline,F#,Pipeline,所以我有一个函数solveQuasion,它返回一对float*float[]。打印数字和阵列并继续使用阵列的最佳方式是什么?我编写了以下代码,但似乎有更好的方法 如果你想在管道中实现这一点,我认为你的解决方案无法改进。另一种方法是使用let绑定以及拆分流水线操作,以避免使用类似于map和iter的爱子函数 let (det, solution) = SolveEquasion printfn "Determinant = %f\nSolution = %A" det (Array.toList
如果你想在管道中实现这一点,我认为你的解决方案无法改进。另一种方法是使用
let
绑定以及拆分流水线操作,以避免使用类似于map
和iter
的爱子函数
let (det, solution) = SolveEquasion
printfn "Determinant = %f\nSolution = %A" det (Array.toList solution)
//do something else with solution
首先,通过返回单个值而不是上一个函数中的元组,可以跳过使用
snd
:
...
|> SolveEquasion
|> (fun (det, solution) ->
printfn "Determinant = %f\nSolution = %A" det (Array.toList solution)
solution )
我可能会使用Daniel的方法,使用
let
将要打印的值分配给符号。或者,您可以定义一个printf
变量,它接受一些参数并返回其中一个参数。我不确定是否有一个通用的方案来实现这一点-对于您的示例,它将采用两元素元组:
let mprintf fmt (a, b) =
Printf.kprintf (fun s -> printf "%s" s; (a, b)) fmt a b
然后你可以写:
...
|> SolveEquasion
|> mprintfn "Determinant = %f\nSolution = %A"
|> snd |> // ... more stuff with solution
我认为最初的解决方案很好,我们可以通过给匿名函数起一个名字来提高它的清晰度,这个名字我在其他一些基于管道化高阶函数的库中见过:tap 当你说“继续使用数组”时,你的意思是通过管道将它连接到其他函数吗?
...
|> SolveEquasion
|> mprintfn "Determinant = %f\nSolution = %A"
|> snd |> // ... more stuff with solution
let tap f x =
f x
x
(1.0, [| 2.0; 3.0 |])
|> tap (fun (s, a) -> printfn "%A %A" s a)
|> snd