次の CoffeeScript コードを Javascript にコンパイルしようとしています。
GetCard = ->
do Math.floor do Math.random * 12
Results = ->
do NewGame if prompt "You ended with a total card value of #{UserHand}. Would you like to play again?"
else
alert "Exiting..."
NewGame = ->
UserHand = 0
do UserTurn
UserTurn = ->
while UserHand < 21
if prompt "Would you like to draw a new card?" is "yes"
CardDrawn = do GetCard
UserHand += CardDrawn
alert "You drew a #{CardDrawn} and now have a total card value of #{UserHand}."
else
do Results
break
しかし、yes と答えた場合、結果の Javascript は次のエラーをコンソールに出力します。
Uncaught TypeError: number is not a function BlackJack.js:4
GetCard BlackJack.js:4
UserTurn BlackJack.js:22
NewGame BlackJack.js:14
onclick
また、CoffeeScript は何らかの理由でUserHandを0に設定していません。私はJavascriptにかなり慣れておらず、CoffeeScriptにも非常に慣れていません。私はCoffeeScriptのドキュメントとCoffeeScriptクックブックを検索して読みました.CSコードは正しいように見えますが、JSはそうではありません:
var GetCard, NewGame, Results, UserTurn;
GetCard = function() {
return Math.floor(Math.random() * 12)();
};
Results = function() {
return NewGame(prompt("You ended with a total card value of " + UserHand + ". Would you like to play again?") ? void 0 : alert("Exiting..."))();
};
NewGame = function() {
var UserHand;
UserHand = 0;
return UserTurn();
};
UserTurn = function() {
var CardDrawn, _results;
_results = [];
while (UserHand < 21) {
if (prompt("Would you like to draw a new card?") === "yes") {
CardDrawn = GetCard();
UserHand += CardDrawn;
_results.push(alert("You drew a " + CardDrawn + " and now have a total card value of " + UserHand + "."));
} else {
Results();
break;
}
}
return _results;
};
どんな助けでも大歓迎です。ありがとう!
更新: すべての回答に感謝します。二重括弧について少し混乱し、do キーワードを誤って使用して、関数呼び出し括弧の代わりにパラメーター括弧を置き換えました。ただし、グローバルスコープについてはまだ混乱しています。プレーンな JS で var キーワードを使用できることは知っていますが、CoffeeScript のドキュメントでは、スコープを管理するため、使用する必要はないと指定されていますか?