Coffeescript 咖啡脚本中的While循环
我不熟悉咖啡脚本,一直在读这本书。以下是本书第二章中的几句话,在阅读时让我感到困惑: CoffeeScript公开的唯一低级循环是while循环。这与纯JavaScript中的while循环的行为类似,但还有一个额外的优点,即它返回一个结果数组,即类似于array.prototype.map()函数 虽然对于一个咖啡脚本程序员来说这看起来不错,但作为一个新手,我无法理解代码的作用。此外,返回结果数组的单词似乎与while是循环构造而不是函数这一事实不符。因此,它返回某物的概念似乎令人困惑。此外,在循环的每次迭代中,带有字符串“Brave Sir Robin Run away”的变量Coffeescript 咖啡脚本中的While循环,coffeescript,Coffeescript,我不熟悉咖啡脚本,一直在读这本书。以下是本书第二章中的几句话,在阅读时让我感到困惑: CoffeeScript公开的唯一低级循环是while循环。这与纯JavaScript中的while循环的行为类似,但还有一个额外的优点,即它返回一个结果数组,即类似于array.prototype.map()函数 虽然对于一个咖啡脚本程序员来说这看起来不错,但作为一个新手,我无法理解代码的作用。此外,返回结果数组的单词似乎与while是循环构造而不是函数这一事实不符。因此,它返回某物的概念似乎令人困惑。此外,
num
似乎很尴尬,因为值num
被用作循环计数器
如果您能解释代码的行为,并用更简单的例子说明作者想要表达的内容,我将不胜感激。哇!我不知道这一点,但如果你记得Coffeescript总是返回“block”的最后一个表达式,这绝对是有道理的。 因此,在您的情况下,它返回表达式(如果这使您感到困惑,则不是通过“return”语句)
num + " Brave Sir Robin ran away"
'use strict'
exports.generate = (number) ->
return [] if number < 2
candidate = 1
while number > 1
candidate++
primes = while number % candidate is 0
number /= candidate
candidate
candidate = number - 1 if Math.sqrt(number) < candidate
primes
从与while条件关联的块中,当您返回多个这样的表达式时,它将它们推送到一个数组中
看看生成的JavaScript,它可能会更清晰,因为生成的代码几乎是程序性的
var minstrel, num;
num = 6;
minstrel = (function() {
var _results;
_results = [];
while (num -= 1) {
_results.push(num + " Brave Sir Robin ran away");
}
return _results;
})();
我希望这对您有意义。注意,该函数调用可能非常低效 下面是一个主要因素生成器
'use strict'
exports.generate = (number) ->
return [] if number < 2
primes = []
candidate = 1
while number > 1
candidate++
while number % candidate is 0
primes.push candidate
number /= candidate
candidate = number - 1 if Math.sqrt(number) < candidate
primes
第一个版本在4毫秒内运行了我的测试,最后一个版本需要18毫秒。我相信原因是生成的闭包返回素数
'use strict'
exports.generate = (number) ->
return [] if number < 2
candidate = 1
while number > 1
candidate++
primes = while number % candidate is 0
number /= candidate
candidate
candidate = number - 1 if Math.sqrt(number) < candidate
primes