很多F#的新手,似乎无法让我的Google员工为这个问题工作。
我有这个功能
namespace RiskMeasurement
module Basics01 =
let AvailableCapital (nominalAssetValue: float) (provisions: float) (liabilities: float) =
nominalAssetValue - provisions - liabilities
用
调用namespace RiskMeasurement
module Main =
[<EntryPoint>]
let main args =
let floats = Array.map float args
let availableCapital = Basics01.AvailableCapital floats.[0] floats.[1] floats.[2]
printfn "Available Capital: %f" availableCapital
let availableCapital = Basics01.AvailableCapital floats.[0], floats.[1], floats.[2]
// Return 0 to indicate success.
0
当我用空格分隔的args调用函数时,availableCapital是一个浮点数。那讲得通。当用逗号分隔args调用时,availableCapital是(float - &gt; float - &gt; float)* float * float。我根本不明白。我在做什么?
答案 0 :(得分:3)
这样读:
let availableCapital = (Basics01.AvailableCapital floats.[0]), floats.[1], floats.[2]
因此availableCapital
的第一个组件是部分应用的函数,它需要两个参数。
如果你想用逗号分隔的参数调用它,你可以写
let availableCapital = Basics01.AvailableCapital (floats.[0], floats.[1], floats.[2])
并获得类型错误。
答案 1 :(得分:2)
Basics01.AvailableCapital floats.[0], floats.[1], floats.[2]
是一个3元组,包含Basics01.AvailableCapital floats.[0]
作为第一个元素floats.[1]
作为第二个元素,floats.[2]
作为第三个元素。
答案 2 :(得分:2)
其他一些好的答案已经存在;简而言之,'逗号运算符'在解析表达式时具有非常低的优先级。
既然你提到你是F#的新手,你可能想看看
F# function types: fun with tuples and currying
如果您需要了解f(x,y)
和f x y
之间的区别。