2011-11-27 30 views
18

Nói rằng tôi có một trong haiCoffeescript chạy chức năng hoặc đọc biến

msg = "Saved Successfully" 

hoặc

msg = -> "Saved #{@course.title} Successfully" 

Liệu có cách nào để thanh lịch nhận được giá trị của msg mà không biết cho dù đó là một chức năng hoặc một biến thường xuyên hơn đang làm

success_message = if typeof msg is 'function' then msg() else msg 

Trả lời

35

Có viết tắt CoffeeScript bạn có thể tận dụng:

f?() 

tương đương với

f() if typeof f is 'function' 

có nghĩa là bạn có thể viết

success_message = msg?() ? msg 

này hoạt động vì msg?() có giá trị undefined nếu msg không phải là một hàm.

Nên biết trước: này sẽ thất bại nếu msg() lợi nhuận null, thiết success_message đến msg chức năng.

Thực sự, nếu bạn đang đi để làm điều này trong ứng dụng của bạn, bạn nên viết một hàm tiện ích:

toVal = (x) -> if typeof x is 'function' then x() else x 
successMessage = toVal msg 

Bạn thậm chí có thể đính kèm toVal để nguyên mẫu Object nếu bạn đang cảm thấy mạo hiểm ..

Các vấn đề liên quan