我剛開始使用Coffeescript和Coffeescript控制檯以及Underscore。然而,無論何時我定義一個函數,Coffeescript都認爲_
意味着這個函數,並且似乎忘記了_ = require 'underscore'
的初始賦值。Underscore在Coffeescript的控制檯中不起作用
爲什麼會發生這種情況?我怎樣才能防止它?
(我真的希望能夠從我的文件複製粘貼代碼到控制檯)。
(是否_
必須在CoffeeScript的控制檯一些特殊的含義?這是否意味着「最後的結果」什麼?那會解釋我的問題)
詳情:
$ 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
正確,簡短的回答:'_'確實意味着「最後的結果」。這沒有很好的記錄,但它是爲了與'node' REPL保持一致而完成的。唉,這意味着你必須將Underscore映射到其他標識符。 –
我認爲最好的做法是在CoffeeScript REPL中使用'__'(兩個下劃線)作爲Underscore:'__ = require'underscore'' – robbrit
將現有代碼複製/粘貼到REPL時,這非常令人沮喪。我發現的最好的事情是設置'__ = require'下劃線「',然後在REPL中輸入'__',然後執行任何代碼。 ('__ '將返回下劃線,所以'_'將指向下一個運行的命令的下劃線庫。) –