2010-09-30 9 views
3

Très newbie avec F #, ne peut pas sembler obtenir mon googler au travail pour cette question.Que se passe-t-il lorsque j'appelle une fonction avec des arguments séparés par des virgules?

J'ai cette fonction

namespace RiskMeasurement 
module Basics01 = 
    let AvailableCapital (nominalAssetValue: float) (provisions: float) (liabilities: float) = 
     nominalAssetValue - provisions - liabilities 

Appelé avec

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 

Quand j'appelle la fonction avec les args séparés par des espaces, availableCapital est un flotteur. Ça a du sens. Lorsqu'elle est appelée avec des virgules séparant les arguments, availableCapital est (float -> float -> float) * float * float. Je ne comprends pas ça du tout. Que suis-je en train de faire?

Répondre

2
Basics01.AvailableCapital floats.[0], floats.[1], floats.[2] 

est un 3-tuple contenant Basics01.AvailableCapital floats.[0] comme premier élément floats.[1] que le deuxième élément et floats.[2] en tant que troisième élément.

3

Lire comme ceci:

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

La première composante de availableCapital est une fonction partiellement appliquée qui veut deux arguments.

Si vous voulez appeler avec les arguments séparés par des virgules, vous écririez

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

et obtenir une erreur de type.

2

D'autres bonnes réponses déjà; En bref, l'opérateur 'virgule' a une très faible priorité lorsqu'il s'agit d'analyser des expressions.

Puisque vous mentionnez que vous êtes nouveau à F #, vous pouvez consulter

F# function types: fun with tuples and currying

si vous avez besoin d'en savoir plus sur la différence entre f(x,y) et f x y.

+0

Merci pour le lien! –

Questions connexes