Но, Вы, возможно, изобрели Монады!
sigfpe говорит:
, Но все они представляют монады как что-то нуждающееся тайное объяснения. Но то, что я хочу обсудить, - то, что они не являются тайными вообще. На самом деле сталкивающийся с различными проблемами в функциональном программировании Вы велись бы, непреклонно, к определенным решениям, все из которых являются примерами монад. На самом деле я надеюсь заставить Вас изобретать их теперь, если Вы уже не имеете. Это - тогда маленький шаг, чтобы заметить, что всеми этими решениями является на самом деле то же скрытое решение. И после чтения этого, Вы могли бы быть в лучшем положении для понимания других документов о монадах, потому что Вы распознаете все, что Вы рассматриваете как что-то, что Вы уже изобрели.
Многие проблемы, которые монады пытаются решить, связаны с проблемой побочных эффектов. Таким образом, мы запустим с них. (Обратите внимание, что монады позволяют, Вы действительно больше, чем обрабатываете побочные эффекты, в особенности много типов контейнерного объекта могут быть просмотрены как монады. Некоторым введениям в монады трудно согласовать эти два различного использования монад и концентрата всего на один или другой.)
На императивном языке программирования, таком как C++, функции не ведут себя ничто как функции математики. Например, предположите, что у нас есть функция C++, которая берет единственный аргумент с плавающей точкой и возвращает результат с плавающей точкой. Поверхностно это могло бы немного походить на математическую функцию, отображающую реалы на реалы, но функция C++ может сделать больше, чем просто возврат число, которое зависит от его аргументов. Это может считать и записать значения глобальных переменных, а также записи выведенного на экран и получение входа от пользователя. На чистом функциональном языке, однако, функция может только считать то, что предоставляется ей в ее аргументах и единственном способе, которым она может иметь эффект на мир, через значения, которые она возвращает.
Вы можете хранить что угодно как данные jQuery, поэтому вы можете сделать это:
var myData = [ { id: 4, setting: 2 }, [ id:3, setting:1 ] };
$("#myitem").data("mydata", myData);
Если вы хотите выбрать что-то по идентификатору, вы можете сделать это:
var myData = {};
myData[4] = 2;
myData[3] = 1;
$("#myitem").data("mydata", myData);
Затем вы можете получить доступ к своим настройкам вот так:
var value = $("#myitem").data("mydata")[3]; // returns 1
Вы можете использовать массивы для хранения списков и объектов JSON для хранения пар ключ-значение.
<div id="DIV1"></div>
<div id="DIV2"></div>
<div id="DIV3"></div>
<div id="DIV4"></div>
<table><tbody><tr id="TR1"><td><td/></tr></tbody></table>
<script type="text/javascript">
$(function() {
$("#TR1").data("blah", [{id: 4, setting: 2}, {id: 3, setting: 1}]);
$("#DIV1").text($("#TR1").data("blah")[0].id);
$("#DIV2").text($("#TR1").data("blah")[0].setting);
$("#DIV3").text($("#TR1").data("blah")[1].id);
$("#DIV4").text($("#TR1").data("blah")[1].setting);
});
</script>
У меня сейчас не так много времени, чтобы попробовать это, но вместо того, чтобы хранить простую строку напротив ключа, почему бы не сохранить объект напротив него?
Перефразируя это jquery docs ...
$("div").data("blah", {id: 4,setting: 2});
var myBlah = $("div").data("blah");
var id = myBlah["id"];
var setting = myBlah["setting"];
Дайте мне знать, как у вас дела.