2012-09-20 1 views
1
if reelID = reelWeights.Count - 1 
    then Array.fold calc1 (0L,0) reelWeights.[reelID] 
    else Array.fold calc2 (0L,0) reelWeights.[reelID] 

J'ai essayé pipeline d'utilisation, il semble ralentir un peu (ne sais pas pourquoi):est-il un moyen de simplifier cette ligne?

reelWeights.[reelID] 
    |> (if reelID = reelWeights.Count - 1 then Array.fold calc1 else Array.fold calc2) (0L,0) 

si je

let calc x = if x then calc1 else calc2 
Array.fold (calc reelID = reelWeights.Count - 1) (0L,0) reelWeights.[reelID] 

alors il semble bien au prix de redondance vérifier conditionion dans les boucles.

+1

La première approche est rapide et lisible. Comment voulez-vous le * simplifier *? – pad

+0

@pad hmm, je pensais qu'il pourrait y avoir de meilleurs moyens pour que je n'aie pas à taper deux fois les mêmes paramètres. Si cela s'avère être une question idiote je vais le supprimer sous peu. – colinfang

+1

Dans tous les cas, les questions de ce type conviennent mieux à [CodeReview.SE] (http://codereview.stackexchange.com/). – ildjarn

Répondre

5

En supposant calc1 et calc2 ont la même signature (ou si elles sont des valeurs plutôt que des fonctions, sont du même type):

let calc = if reelID = reelWeights.Count - 1 then calc1 else calc2 
Array.fold calc (0L, 0) reelWeights.[reelID] 
+0

ce n'est pas appelé fonctionnel pour rien! – nicolas

1

Ou en une ligne:

let weight = 
    Array.fold (if reelID = (reelWeights.Count - 1) then calc1 else calc2) (0L,0) reelWeights.[reelID]