Ở đây bạn đi:
my_assert = (test) ->
str = my_assert.caller.toString()
match = /return my_assert\((.*)\)/.exec str
console.log match[1], test
a = '1'
b = '2'
do -> my_assert(a!=b)
do -> my_assert(b!=a)
> a !== b true
> b !== a true
http://jsfiddle.net/m7qRN/
Thông báo trước là bạn phải gọi my_assert
cuộc gọi từ chức năng ẩn danh riêng biệt để có thể chắc chắn lấy mã nguồn của cuộc gọi khẳng định .
Trong CoffeeScript, nó không quá tệ khi sử dụng ký hiệu do ->
.
Trong JS, đây là: (function(){my_assert(a!=b)})();
.
Bạn có thể vượt qua trong các thử nghiệm như một chức năng như vậy:
my_assert -> a!=b
my_assert(function(){a!=b});
tại sao câu trả lời này nhận được 3 phiếu khi nó không thực sự giải quyết các câu hỏi yêu cầu và thay vào đó chỉ ra một lỗi cú pháp trong một câu hỏi mà thậm chí không có nhiều cú pháp? Cấp, đó là một gợi ý hữu ích, nhưng tôi không thấy làm thế nào nó có giá trị bỏ phiếu lên như là câu trả lời "tốt nhất" vì nó không thực sự là một ở tất cả. –
@GeniaS. ... nó trực tiếp giải quyết các mối quan tâm của OP ... họ muốn nhận được các giá trị từ bên trong var a và b, không phải là giá trị được truyền. Thay đổi tinh tế trong việc đọc câu hỏi .... – Rondo