Что происходит, когда я вызываю функцию с аргументами, разделенными запятыми? - PullRequest
3 голосов
/ 30 сентября 2010

Очень новичок с F #, похоже, мой гуглер не может работать на этот вопрос.

У меня есть эта функция

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

Когда я вызываю функцию с аргументами, разделенными пробелами, availableCapital является плавающей точкой.В этом есть смысл.При вызове с запятыми, разделяющими аргументы, availableCapital имеет вид (float -> float -> float) * float * float.Я не понимаю этого вообще.Что я делаю?

Ответы [ 3 ]

3 голосов
/ 30 сентября 2010

Прочитайте это так:

let availableCapital = (Basics01.AvailableCapital floats.[0]), floats.[1], floats.[2]

Итак, первый компонент availableCapital - это частично примененная функция, которая хочет еще два аргумента.

Если вы хотите вызвать ее с помощьюаргументы, разделенные запятыми, вы должны написать

let availableCapital = Basics01.AvailableCapital (floats.[0], floats.[1], floats.[2])

и получить ошибку типа.

2 голосов
/ 30 сентября 2010

Некоторые другие хорошие ответы уже; вкратце, «оператор запятой» имеет очень низкий приоритет при разборе выражений.

Поскольку вы упоминаете, что вы новичок в F #, вы можете проверить

Типы функций F #: веселье с кортежами и карри

, если вам нужно узнать о разнице между f(x,y) и f x y.

2 голосов
/ 30 сентября 2010
Basics01.AvailableCapital floats.[0], floats.[1], floats.[2]

- это 3-кортеж, содержащий Basics01.AvailableCapital floats.[0] в качестве первого элемента floats.[1] в качестве второго элемента и floats.[2] в качестве третьего элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...