web-dev-qa-db-fra.com

Fonctions dans CoffeeScript

J'essaie de convertir un function de Javascript en CoffeeScript. Voici le code:

function convert(num1, num2, num3) {
    return num1 + num2 * num3;
}

Mais comment puis-je faire cela dans CoffeeScript?


J'essaie d'exécuter la fonction à partir d'une source HTML comme celle-ci:

<script type="text/javascript" src="../coffee/convert.js"></script>

<script type="text/javascript">
    convert(6, 3, 10);
</script>

Mais cela ne fonctionnera pas et j'obtiens une erreur disant: ReferenceError: Can't find variable: convert

Comment corriger ça?

49
Nathan Campos

Vous devez exporter la fonction de conversion dans la portée globale.
Voir Comment l'accès à Coffescript peut-il fonctionner à partir d'autres ressources?

window.convert = (num1, num2, num3) ->
  num1 + num2 * num3
78
lawnsea

@lawnsea est une excellente réponse.

Je veux juste ajouter quelques réflexions.

Au lieu de polluer l'espace de noms global, je préfère ajouter une seule variable à l'objet window.

window.App = {}

Ensuite, vous pouvez accéder à App globalement et y ajouter toutes vos données. la fonction convert peut maintenant être exprimée de cette façon:

App.convert = convert = (a, b, c) -> a + b * c

Ensuite, pour appeler la fonction dans la portée locale

convert 1,2,3

Et maintenant dans le monde

App.convert 1,2,3
33
jaime

Au niveau supérieur de votre fichier coffeescript, this (aka @) devrait faire référence à window. Donc, pour le joindre ici, vous pouvez utiliser le raccourci:

@convert = (num1, num2, num3) -> num1 + num2 * num3

Notez cependant que cela pollue l'espace de noms global. La solution proposée par jm - est plus prudente. Mais vous pouvez remplacer

window.App = {}

avec

@App = {}

L'avantage d'utiliser @ est qu'il fait référence à global dans node.js, vous pouvez donc utiliser le même code pour exposer vos fonctions dans les environnements de navigateur et côté serveur.

17
twf
window.convert = (num1, num2, num3) ->
  num1 + num2 * num3
5
edoloughlin

Vous devriez vérifier ces diapositives impressionnantes qui viennent d'être publiées aujourd'hui par godfoca http://www.slideshare.net/godfoca/lets-have-a-cup-of-coffeescript En outre, vous pouvez essayer le code via- le Web à http://jashkenas.github.com/coffee-script/

convert = (num1, num2, num3) ->
  num1 + num2 * num3
1
jrhicks
convert = (num1, num2, num3) -> num1 + num2 * num3
0
Jasmijn