Coffeescript 下划线不';我不能在咖啡馆工作;s控制台

Coffeescript 下划线不';我不能在咖啡馆工作;s控制台,coffeescript,underscore.js,Coffeescript,Underscore.js,我刚刚开始使用Coffeescript和Coffeescript控制台,还有下划线。然而,每当我定义一个函数时,Coffeescript就认为\uu意味着该函数,并且似乎忘记了\uu=require'underline'的初始赋值 为什么会发生这种情况?我如何预防它? (我真的希望能够将粘贴代码从我的文件复制到控制台。) (在Coffeescript控制台中,\uuu是否有一些特殊的含义?它是指“最后的结果”还是什么?这可以解释我的问题?) 详情: $ coffee coffee> _.

我刚刚开始使用Coffeescript和Coffeescript控制台,还有下划线。然而,每当我定义一个函数时,Coffeescript就认为
\uu
意味着该函数,并且似乎忘记了
\uu=require'underline'
的初始赋值

为什么会发生这种情况?我如何预防它?
(我真的希望能够将粘贴代码从我的文件复制到控制台。)

(在Coffeescript控制台中,
\uuu
是否有一些特殊的含义?它是指“最后的结果”还是什么?这可以解释我的问题?)

详情:

$ coffee 
coffee> _.contains [1, 2, 3], 3   # no Underscore, initially
TypeError: Cannot call method 'contains' of undefined
    at ...
coffee> 
coffee> _ = require 'underscore'
{ [Function]
  _: [Circular],
  VERSION: '1.3.3',
  forEach: [Function],
  ...

coffee> _.contains [1, 2, 3], 3    # now Underscore works fine
true
coffee> 
------> someFunction = (a, b) ->   # define a function ...
......>   a + b

[Function]
coffee> 
coffee> _.contains [1, 2, 3], 3     # now `_` is not Underscore any more!
TypeError: Object function (a, b) {    # Does `_` mean "last result" or sth?
  return a + b;
} has no method 'contains'
    at evalmachine.<anonymous>:3:7
    at Object.eval (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/coffee-script.js:142:17)
    at Interface.<anonymous> (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/repl.js:131:40)
    at Interface.emit (events.js:67:17)
    at Interface._onLine (readline.js:162:10)
    at Interface._line (readline.js:426:8)
    at Interface._ttyWrite (readline.js:603:14)
    at ReadStream.<anonymous> (readline.js:82:12)
    at ReadStream.emit (events.js:88:20)
    at ReadStream._emitKey (tty.js:327:10)
coffee> 
coffee> _ = require 'underscore'
coffee> _.contains [1, 2, 3], 3    # Now all is fine again, for a short while
true
$coffee
coffee>包含[1,2,3],3#最初没有下划线
TypeError:无法调用未定义的方法“contains”
在
咖啡>
咖啡>\=需要“下划线”
{[功能]
_:[通告],
版本:“1.3.3”,
forEach:[函数],
...
咖啡中含有[1,2,3]和[3],现在下划线就可以了
真的
咖啡>
------>someFunction=(a,b)->#定义一个函数。。。
…>a+b
[功能]
咖啡>
coffee>包含[1,2,3],3#现在``不再是下划线了!
类型错误:对象函数(a,b){``是指“最后的结果”还是什么?
返回a+b;
}没有方法“contains”
在评估机器上:3:7
在Object.eval(/usr/local/lib/node_modules/coffee script/lib/coffee script/coffee script.js:142:17)
在接口处。(/usr/local/lib/node_modules/coffee script/lib/coffee script/repl.js:131:40)
在Interface.emit(events.js:67:17)
在接口处在线(readline.js:162:10)
在接口处。\u行(readline.js:426:8)
在接口处写入(readline.js:603:14)
在ReadStream。(readline.js:82:12)
在ReadStream.emit(events.js:88:20)
在ReadStream._emitKey(tty.js:327:10)
咖啡>
咖啡>\=需要“下划线”
咖啡含有[1,2,3]和[3],现在一切都好了,一会儿就好了
真的
CoffeeScript REPL的核心是:

try {
  _ = global._;
  returnValue = CoffeeScript["eval"]("_=(" + code + "\n)", {
    filename: 'repl',
    modulename: 'repl'
  });
  if (returnValue === void 0) {
    global._ = _;
  }
  repl.output.write("" + (inspect(returnValue, false, 2, enableColours)) + "\n");
} catch (err) {
  error(err);
}
因此,如果最后一个命令返回了某个内容,则
\u
将是该内容。虽然我找不到任何有关此内容的文档,但搜索
\u
并不是一项非常高效的活动。如果您想在CoffeeScript REPL中使用下划线.js,则必须将其称为
\u
以外的内容

多亏了(他写了这篇文章,所以我认为我们可以信任他),我们知道CoffeeScript REPL使用
\uu
作为最后一个结果来匹配以下对象的行为:

复制功能
[…]
特殊变量
(下划线)包含最后一个表达式的结果


Ruby的
irb
也做了同样的事情。

对,简短的回答:
\uu
确实意味着“最后的结果”这没有很好的文档记录,但它是为了与
节点
REPL保持一致而做的。唉,这意味着您必须将下划线映射到其他标识符。我认为最好的做法是使用
\uuu
(两个下划线)对于CoffeeScript REPL中的下划线:
\uuuu=require'underline'
在复制/粘贴现有代码到REPL时,这是非常令人沮丧的。我发现最好的方法是设置
\uuuuu=require“underline”
,然后在REPL中键入
\uuu
,然后再执行任何代码。(
\uuu
将返回下划线,因此
\u
将指向下一个运行的命令的下划线库。)