Очень простой способ - использовать службу $filter
и функцию в области, которая делегирует правильному фильтру:
angular.module('forecastDirective', [])
.directive('forecast', ['appConfig', function(appConfig) {
return {
templateUrl: appConfig.directivesRoot + 'templates/forecast.html',
replace: true,
scope: {
weatherObject: "=",
convertToDate: "&",
filterTemp: "@",
dateFormat: "@",
},
controller: ['$filter', '$scope', function($filter, $scope) {
$scope.filterFn = function(in) {
return $filter($scope.filterTemp)(in);
};
}
}
}]);
Недостатком является то, что вы больше не можете использовать его как filter:
Daytime temperature: {{ filterFn(weatherObject.temp.day) }}
Предполагаю, что функция фильтра возвращает примитив (строка, число, логическое значение). Если он возвращает что-то сложное (объект, массив), вам может потребоваться кэшировать возвращаемые значения, чтобы избежать бесконечных циклов дайджеста.
Вы можете реализовать мета-фильтр:
angular.module(...)
.filter('metafilter', ['$filter', function($filter) {
return function(input, filterName) {
return $filter(filterName)(input);
};
}]);
Используйте его как:
Daytime temperature: {{ weatherObject.temp.day | metafilter:filterTemp }}
Это скрипка, демонстрирующая метафильтр: https://jsfiddle.net/opL1zfzd/
Я думаю наиболее резкое различие в выборе структур данных.
В Java или C я определяю структуры или классы очень строго. Если я должен добавить свойство, я возвращаюсь и изменяю определение.
В Perl я буду просто использовать хеш и 'изобретать' ключи, поскольку я кодирую.
На динамических языках я более экспериментален. Легче изменить вещи на лету, таким образом, я могу исследовать решения быстрее.
, Если я знаю то, что я хочу сделать, и обычно как сделать это, мне нравится C++. Если я не знаю, как сделать то, что я хочу сделать, и вероятно не совсем уверено в том, что я хочу сделать, я очень предпочитаю Lisp.
Динамические языки способны к выполнению кода, который был создан во времени выполнения. Это очень опасно, если вредоносный код введен. Но очень мощный, если можно санировать среду.
я думаю, что люди JavaScript делают это путем выполнения файлов JSON.
Одним путем я обычно использую в своих интересах языки динамического программирования, находится в упрощении и разъяснении синтаксиса. Если я представляю базу данных, например, синтаксис, который я использую для взаимодействия с нею, может быть намного более чистым, если я могу динамично загрузить свойства и методы на объекте базы данных для его таблиц, таблиц и строк для их столбцов, и так далее. Различие могло бы быть между:
$row = $db->getTable('user')->getRow(27);
$row->setValue('name', 'Bob');
и
$row = $db->user->getRow(27);
$row->name = 'Bob';
'сбережения визуального шума' второй формы действительно начинают складывать при выполнении сложных вещей.
Быстрые повторения делают более счастливых программистов, и они не прибывают немного быстрее, чем интерактивный интерпретатор. Хорошая эксплуатация интерпретатора дает Вам песочницу, тестирование и разработку прототипа одновременно.
Остерегаются программирования перестановкой, как бы то ни было. Мое персональное эмпирическое правило - то, что это просто, потому что это работает, не означает, что это готово, когда можно объяснить, почему это работает, это готово.
Больше библиотек и более важный [еще 110] применимые библиотеки .
Мое предположение - то, что "Утка, Вводящая" обычно связываемый с динамическими языками, помогает упростить код значительно и делает пишущий универсальный код намного легче. Вы не ограничиваетесь строгой иерархией классов и таким образом в состоянии более легко составить компоненты из различных библиотек вместе.
Мои самые большие усиления находятся в отображении между базами данных и объектами (ORM).
, Если нет никакого понятия типа, становится очень легко сказать, присваивают каждый столбец подряд значению в объекте. Конечно, компромисс - то, что может быть несоответствие между типом значения, Вы думаете, там и что вводит компьютер, делает.
Динамические Языки могут изменить объект во время выполнения, можно добавить методы, свойства...
Одним хорошим примером Динамического волшебства Языков является этот фрагмент кода Groovy, которые называют метод на веб-сервисе во всего двух строках кода:
def proxy = new SoapClient("http://localhost:6980/MathServiceInterface?wsdl");
def result = proxy.add(1.0, 2.0);
Это - другой отрывок Groovy, которые извлекают данные из XML:
def contacts = new XmlParser().parseText("<contacts><name>Bahaa Zaid</name></contacts>");
def myName = contacts.name[0].text();
Вы не можете сделать этого на Статических Языках. Динамический Язык может изменить объекты отразить фактическое условие во время выполнения.
У меня нет конкретного ответа, просто предложение: взгляните на книгу " Шаблоны проектирования в Ruby ": он охватывает большинство классических шаблонов проектирования (как Gamma и др. и т. д.) и довольно кратко выражает их в Ruby :)
Мне нравится ответ Слима. Я провожу сумасшедшее количество времени в Java и C ++, создавая собственные структуры данных, которые просто бесплатны в Python / Ruby. И создание специализированных функций для обработки этих пользовательских структур данных. Да, в C ++ STL действительно хорош. Да, Дженерики в Java хороши. Они помогают создавать пользовательские структуры данных гораздо быстрее, однако они все еще требуют много размышлений и размышлений.
Однако есть более фундаментальная причина, по которой с динамическими языками легче работать. Это глубокая идея, которая называется «Утиная печать». Некоторые комментарии выше относятся к типу утки, но, пожалуйста, уделите время тому, чтобы подумать о том, что такое утка. Это принципиально другой способ взглянуть на мир. Представление, несовместимое с такими языками, как Java и C ++.
Утиная типизация означает, что вы не тратите время на определение утки. Не имея необходимости формально определять свои объекты, вы экономите много времени и энергии. Получить правильные определения сложно. Взгляните на мой пост в блоге, где я привожу примеры: Формальные определения менее полезны, чем вы думаете
Утиная печать оказалась чрезвычайно полезной. Принцип «Обязательно игнорировать» в XML сделал XML таким значительным и полезным в Интернете. Но это просто пример утки.
Еще один способ выразить утки - это веб-мантра «Будь строг в том, что ты посылаешь, щедро в том, что ты принимаешь». Это также очень фундаментальная идея.
Наконец, Вы можете вернуться к моему длинному посту в блоге, где я объясняю типизацию утки и ее связь с такими вещами, как искусственный интеллект и моделирование: Типирование утки, искусственный интеллект и философия
Это сводится к одному из моих любимых соотношений: как много времени я провожу, размышляя о решении проблемы, по сравнению с тем, сколько времени я размышляю об инструменте, который я использую для решения проблемы. Думайте об этом как о эквиваленте S / N.
Джон, судя по вашему обновлению от 5 января 2009 г., вы можете найти AMOP интересным прочтите и многое другое в той строке, о которой вы думаете. Он довольно шепелявый, но, в конце концов, многие из хороших динамических идей родились именно там. Так что, если вы можете насладиться этим аспектом (или забыть о нем), авторы действительно обсуждают динамические аспекты, которые необходимы и используются для чего-то подобного. Это довольно мощная штука.
Для меня это скорость поворота. Динамические языки, которые я использую (на данный момент Python и немного JavaScript), интерпретируются. Это означает, что я могу пробовать что-то на лету. Если я хочу увидеть, как ведет себя определенная часть API, я могу просто взломать интерпретатор на пару минут.
Если бы я хотел сделать то же самое на языке вроде C #, мне бы пришлось запустить VS, создать проект, а затем скомпилировать его. Если я хочу протестировать часть более крупного программного обеспечения, над которым я работаю, мне, вероятно, придется его скомпилировать, что может занять много времени. К счастью, в .Net я могу загружать сборки из большого проекта в IronPython и получать некоторые из тех же преимуществ (например, быстрое тестирование различных частей API) интерпретируемых языков.
Я не могу процитировать это прямо сейчас (моя память меня подводит), но я слышал что-то вроде:
Ближе всего индустрия программирования подошла к серебряному пуля управляемые языки - освобождение программиста от необходимости беспокоиться о детали управления памятью и позволяя им сосредоточить больше энергии
Итак, я могу предположить, что это не столько то, что вы программируете иначе , сколько то, что вы можете посвятить больше своего мозга «решению проблемы», а чем детали реализации решения.
Прочтите "Perl высшего порядка" Марка Джейсона Доминуса. В нем обсуждается только Perl, но он дает методы, естественные для Perl, которые были бы менее естественными для большинства статических языков.
All languages obviously have their strengths and weaknesses and dymanic vs static
- это только один из многих способов классификации языка. Я бы не стал утверждать, что динамические языки в целом лучше или хуже статических языков. Но я действительно думаю, что эта книга очень хорошо показывает различные способы решения проблем с использованием Perl, что было бы лучше сложно или невозможно для большинства статических языков.