Javascript 为什么coffeescript会覆盖我的下划线?
我编写了以下代码,旨在将字符串连接到url中Javascript 为什么coffeescript会覆盖我的下划线?,javascript,coffeescript,Javascript,Coffeescript,我编写了以下代码,旨在将字符串连接到url中 _ = require 'underscore' exports.joinUrl = (start, rest...) -> for item in rest if _.last start is '/' if _.first item is '/' start += item[1..] else start += item else if _.first
_ = require 'underscore'
exports.joinUrl = (start, rest...) ->
for item in rest
if _.last start is '/'
if _.first item is '/'
start += item[1..]
else
start += item
else
if _.first item is '/'
start += item
else
start += '/' + item
start
当我启动coffeescript repl时,发生了一件非常奇怪的事情:
> _ = require 'underscore'
[snipped]
> {joinUrl} = require './joinurl'
{ joinUrl: [Function] }
> _
{ joinUrl: [Function] }
嗯?不知何故,joinUrl的导入正在覆盖变量389;的定义。即使coffeescript将上面粘贴的模块封装到一个函数中,这样变量u的任何使用都不会影响外部作用域,并且在代码中的任何点上,我都不会对u进行任何赋值,除非需要“下划线”,这应该是完全相同的
知道这里发生了什么吗?就像在Python中一样,REPL使每个表达式结果都可以作为ux使用,就像在 您的代码被翻译成
> _ = (_ = require 'underscore')
[snipped]
> _ = ({joinUrl} = require './joinurl')
{ joinUrl: [Function] }
> _ = (_)
{ joinUrl: [Function] }
与Python中一样,REPL使每个表达式结果都可以作为ux使用,如 您的代码被翻译成
> _ = (_ = require 'underscore')
[snipped]
> _ = ({joinUrl} = require './joinurl')
{ joinUrl: [Function] }
> _ = (_)
{ joinUrl: [Function] }
这记录在[repl.cofee docs]中。它说每个输入都被分配给uu,以强制它成为一个表达式。哎呀,好吧,这回答了我的问题。太糟糕了,它不能很好地处理使用下划线.js的代码。@limp_chimp:说清楚一点,这是REPL的一个特性,而不是CoffeeScript本身。这只是意味着在REPL中,需要为下划线使用不同的名称。您仍然可以在所有代码中使用u。这在[repl.cofee docs]中有记录。它说每个输入都被分配给uu,以强制它成为一个表达式。哎呀,好吧,这回答了我的问题。太糟糕了,它不能很好地处理使用下划线.js的代码。@limp_chimp:说清楚一点,这是REPL的一个特性,而不是CoffeeScript本身。这只是意味着在REPL中,需要为下划线使用不同的名称。您仍然可以在所有代码中使用。