17-03-2011, 12:00 PM
(Modification du message : 17-03-2011, 12:03 PM par Sephi-Chan.)
Une implémentation que je trouve plus élégante, qui accepte un nombre variable de tableaux :
Et son penchant en Ruby pour illustrer le splat (le * dans les arguments) et le inject (qui vient de la programmation fonctionnelle) :
Le splat permet de transformer tous les arguments transmis dans un tableau. Il est très utile car on peu écrire un prototype de type my_function(foo, bar, *other) qui permet d'avoir des arguments variables à compter des 2 premiers.
C'est bien plus clair (et propre) qu'une fonction qui ne prend aucun argument en apparence mais qui peut en réalité en recevoir une infinité.
Sephi-Chan
function array_melt(){
$result = array();
foreach(func_get_args() as $array){
foreach($array as $attribute => $value){
$result[$attribute] += $value;
}
}
return $result;
}
$character_attributes = array('strength' => 20, 'stamina' => 21, 'agility' => 24);
$sword_attributes = array('strength' => 8, 'spirit' => 4);
$shield_attributes = array('stamina' => 14);
$attributes = array_melt($character_attributes, $sword_attributes, $shield_attributes);
Et son penchant en Ruby pour illustrer le splat (le * dans les arguments) et le inject (qui vient de la programmation fonctionnelle) :
def melt_attributes(*hashes)
hashes.inject({}) do |result, hash|
hash.each do |attribute, value|
result[attribute] = result[attribute].to_i + value # Pour ne pas faire += sur un objet nil !
end
result
end
end
character_attributes = { trength => 20, tamina => 21, :agility => 24 }
sword_attributes = { trength => 8, pirit => 4 }
shield_attributes = { tamina => 14 }
attributes = melt_attributes(character_attributes, sword_attributes, shield_attributes)
Le splat permet de transformer tous les arguments transmis dans un tableau. Il est très utile car on peu écrire un prototype de type my_function(foo, bar, *other) qui permet d'avoir des arguments variables à compter des 2 premiers.
C'est bien plus clair (et propre) qu'une fonction qui ne prend aucun argument en apparence mais qui peut en réalité en recevoir une infinité.
Sephi-Chan