Tôi vừa mới bắt đầu sử dụng Coffeescript và bảng điều khiển Coffeescript và Dấu gạch dưới. Tuy nhiên, bất cứ khi nào tôi định nghĩa một hàm, Coffeescript quyết định rằng _
có nghĩa là hàm đó, và dường như quên nhiệm vụ ban đầu của _ = require 'underscore'
.Dấu gạch dưới không hoạt động trong giao diện điều khiển của Coffeescript
Tại sao điều này lại xảy ra? Làm thế nào tôi có thể ngăn chặn nó?
(Tôi thực sự muốn có thể sao chép mã dán từ các tệp của mình vào bảng điều khiển.)
(Có _
có ý nghĩa đặc biệt trong bảng điều khiển Coffeescript không? Có nghĩa là "kết quả cuối cùng" hay gì đó? Điều đó muốn giải thích vấn đề của tôi)
Chi tiết:
$ 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
Câu trả lời đúng, ngắn: '_' thực sự có nghĩa là" kết quả cuối cùng ". Đây không phải là tài liệu rất tốt, nhưng nó được thực hiện cho sự nhất quán với REPL 'node'. Than ôi, điều này có nghĩa là bạn sẽ phải lập bản đồ Gạch dưới với một số số nhận dạng khác. –
Tôi nghĩ rằng cách thực hành tốt nhất là sử dụng '__' (hai dấu gạch dưới) cho dấu gạch dưới trong CoffeeScript REPL:' __ = require 'underscore'' – robbrit
Điều này khá bực bội khi sao chép/dán mã hiện tại vào REPL. Điều tốt nhất tôi đã tìm thấy là thiết lập '__ = require 'underscore" ', và sau đó gõ' __ 'trong REPL trước bất kỳ mã nào bạn muốn thực hiện. ('__ ' sẽ trả về dấu gạch dưới, vì vậy '_' sẽ trỏ đến thư viện gạch dưới cho lệnh tiếp theo chạy.) –