Acabo de empezar a utilizar Coffeescript y la consola de Coffeescript y subrayar. Sin embargo, cada vez que defino una función, Coffeescript decide que _
significa esa función, y parece olvidar la asignación inicial de _ = require 'underscore'
.Underscore no funciona en la consola de Coffeescript
¿Por qué sucede esto? ¿Cómo puedo prevenirlo?
(realmente me gustaría ser capaz de copiar pegar el código de mis archivos en la consola.)
(no _
tienen un significado especial en la consola CoffeeScript? ¿Quiere decir "el último resultado" o algo así? Eso lo explicaría mi problema)
Detalles:?
$ 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
Derecha, respuesta corta: '_' en verdad significa" último resultado ". Esto no está documentado muy bien, pero se hace para mantener la coherencia con el 'node' REPL. Por desgracia, esto significa que tendrás que asignar un guión bajo a algún otro identificador. –
Creo que la mejor práctica ha sido usar '__' (dos guiones bajos) para subrayar en CoffeeScript REPL:' __ = requerir 'subrayado'' – robbrit
Esto es bastante frustrante al copiar/pegar código existente en el REPL. Lo mejor que he encontrado es establecer '__ = requerir" guión bajo "', y luego escribir '__' en el REPL antes del código que quiera ejecutar. ('__ ' devolverá el guión bajo, por lo que '_' apuntará a la biblioteca de guiones bajos para el próximo comando que se ejecuta). –