2012-05-08 26 views
31

Tôi đọc ở đâu đó rằng jQuery là một đơn nguyên và this answer cho thấy hàm chuỗi trong thư viện underscore.js không phải là một đơn nguyên (nhưng comonad). Và answer to this tương tự, cho thấy đó là monoid.jQuery là một đơn nguyên

Vậy, jQuery có phải là một đơn nguyên không?

+0

Tôi không biết jQuery, do đó, có khả năng hạn chế để trả lời điều này nhưng mọi thứ [có cấu trúc đơn nguyên thường ngụ ý cũng có cấu trúc đơn sắc] [1] nếu bạn nhìn vào đúng cách [1]: http : // comonad.com/reader/2011/monads-from-comonads/ –

+6

Bạn có yêu cầu ai đó cho thấy rằng các luật đơn lẻ giữ cho cốt lõi của API jQuery không? –

Trả lời

31

Hầu hết các API không làm bão hòa các định luật đơn lẻ. jQuery là một số lớn API, vì vậy theo thống kê, nó không có khả năng là "vô tình" monadic. Kết quả là tôi khá hoài nghi rằng API jQuery nói chung có thể đáp ứng các luật đơn nguyên (tức là "jQuery là một đơn nguyên"). Điều này không có nghĩa là một tập hợp con (rất hạn chế) có thể không thỏa mãn chúng, nhưng API nói chung có thể chứa các hoạt động "không an toàn" có thể vi phạm luật khi được sử dụng, phá vỡ sự trừu tượng.

Vì không ai có vẻ đã cung cấp bằng chứng cho thấy API toàn bộ hoặc một phần làm hài lòng pháp luật, tôi đề nghị chúng ta nên giả sử nó, cho đến khi có bằng chứng.

Nó phải được thể hiện:

  • những gì hoạt động tương ứng với jQuery return (nâng giá trị vào jQuery đơn nguyên)?
  • thao tác jQuery nào tương ứng với bind, để dán các phép tính với nhau?
  • luật trái, phải và liên kết giữ gìn các hoạt động đó?

Và sau đó, vi phạm pháp luật nào có thể được cung cấp cho phần còn lại của API jQuery? Tôi có thể, ví dụ, phá vỡ các bind bằng cách gọi một trong các chức năng API khác?

Tài liệu tham khảo:

+2

Liên kết 404 đầu tiên. –

11

Tôi nghĩ rằng bạn đang đề cập đến hành vi lặp ngầm của jQuery. Về khía cạnh đó jQuery tương tự như làm việc trong danh sách đơn nguyên, trong đó chuỗi tương đương với bind và gói phần tử trong $() giống như return (tôi đoán).

Vì vậy, nơi với jquery bạn có thể thêm một yếu tố danh sách mới cho một loạt các divs danh sách với:

$('div').children().append("<li>New list element</li>"); 

... trong Haskell bạn có thể có:

appendToEachList divs = divs >>= children >>= append "<li>New list element</li>" 

Trên đây là từ bộ nhớ và nên được coi là vô nghĩa giả.

Dù sao, tôi nghĩ nó sẽ là một đoạn trích để nói "jQuery là một Monad".

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