var App = App || {};
App = {
getDataFromServer: function(){
var self = this,
deferred = $.Deferred(),
requests = [];
requests.push($.getJSON('request/ajax/url/1'));
requests.push($.getJSON('request/ajax/url/2'));
$.when.apply(jQuery, requests).done(function(xhrResponse) {
return deferred.resolve(xhrResponse.result);
});
return deferred;
},
init: function(){
this.getDataFromServer().done(_.bind(function(resp1, resp2) {
// Do the operations which you wanted to do when you
// get a response from Ajax, for example, log response.
}, this));
}
};
App.init();
Код, который вы разместили в теле вопроса , выполняет исчерпывающее сопоставление шаблонов. Однако, если вы попытаетесь ввести это определение в ghci, вы должны использовать инструкцию single let
:
Prelude> let test [] = [] ; test (x:xs) = test xs
Что вы делаете здесь неверно. Вы сначала определяете неисчерновую функцию test
:
Prelude> let test [] = []
И затем вы определяете другую неисчерновую функцию, также называемую test
, которая скрывает первый:
Prelude> let test (x:xs) = test xs
Это действительно очень сложная задача по тестированию детских программ в REPL (GHCi) Haskell.
Использование let
не очень очевидно (особенно, поскольку оно не требуется в отдельном 'script / program').
И иногда мы НЕ хотим создавать полноценный файл, а вместо этого экспериментируем с небольшой функцией с разными «случаями».
Еще один полезный подход заключается в использовании разделителей :{
& amp; :}
, чтобы определить степень нашей функции.
Скажем, мы хотим попробовать простую рекурсивную функцию sum
, которая может содержать список чисел. Мы тогда сказали бы следующее:
λ > :{
Prelude| sum [] = 0
Prelude| sum (x:xs) = x + sum xs
Prelude| :}
sum :: Num t => [t] -> t
Prelude
λ > sum [1..10]
55
it :: (Enum t, Num t) => t
Обратите внимание, как приятно видеть, насколько мы можем теперь видеть нашу функцию!
Надеюсь, это поможет. Ура!