web-dev-qa-db-ja.com

CoffeeScriptの関数

functionをJavascriptからCoffeeScriptに変換しようとしています。これはコードです:

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

しかし、CoffeeScriptでそれをどのように行うことができますか?


私はこのようなHTMLソースから関数を実行しようとしています:

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

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

しかし、それは機能せず、次のようなエラーが表示されます:ReferenceError: Can't find variable: convert

これを修正する方法は?

49
Nathan Campos

変換関数をグローバルスコープにエクスポートする必要があります。
参照 Coffescriptは他のアセットの機能にどのようにアクセスできますか?

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

@lawnseaの答えは素晴らしいです。

ちょっと考えを加えたいだけです。

グローバル名前空間を汚染する代わりに、windowオブジェクトに変数を1つだけ追加することを好みます。

window.App = {}

その後、Appにグローバルにアクセスし、そこにすべてのものを追加できます。関数convertは、次のように表現できるようになりました。

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

次に、ローカルスコープ内で関数を呼び出す

convert 1,2,3

そして今、世界的に

App.convert 1,2,3
33
jaime

Coffeescriptファイルの最上位では、-this(別名@)はwindowを参照する必要があります。したがって、ここに添付するには、速記を使用できます。

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

ただし、これはグローバル名前空間を汚染することに注意してください。 jm-によって投稿されたソリューションは、より慎重です。しかし、あなたは置き換えることができます

window.App = {}

@App = {}

@を使用する利点は、node.jsでglobalを参照するため、同じコードを使用してブラウザー環境とサーバーサイド環境の両方で関数を公開できることです。

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

Godfocaが本日公開したばかりのこれらの素晴らしいスライドを確認してください http://www.slideshare.net/godfoca/lets-have-a-cup-of-coffeescript また、 the-web at http://jashkenas.github.com/coffee-script/

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