Я нашел "более хорошее" / "лучшее" решение для получения переменных в не самый хороший путь, но это работает.
Вы устанавливаете пользовательский фильтр в django, который заставляет ключ Вашего dict в качестве параметра
заставлять его работать в механизме приложения Google, необходимо добавить файл к основному каталогу, я назвал мой django_hack.py, который содержит этот маленький кусочек кода
from google.appengine.ext import webapp
register = webapp.template.create_template_register()
def hash(h,key):
if key in h:
return h[key]
else:
return None
register.filter(hash)
Теперь, когда у нас есть этот файл, все, что мы должны сделать, говорят механизму приложения использовать его..., что мы делаем это путем добавления, что эта небольшая строка в основной файл
webapp.template.register_template_library('django_hack')
и в шаблонном представлении добавляет, что этот шаблон вместо обычного кода
{{ user|hash:item }}
И должен работать отлично =)
Он считается элегантным, потому что он ортогонален . Это причудливый способ сказать, что аналогичные операции применяются к аналогичным операндам.
Простой пример: +
для целых чисел добавляет их; для чисел с плавающей запятой, то же самое. И на больших целых числах тоже. В строках он объединяет их (чего и следовало ожидать). Теперь это не проблема для +
, этого можно ожидать от любого достойного языка программирования. Но есть такие операции, как map
или filter
, они работают со списками (должны!), Но они также работают с массивами и фактически со всем, что можно перечислить или повторить.
Мне нравится, как работает индексация массива (или списка), вы можете использовать положительные целочисленные индексы для индексации с самого начала, или отрицательные индексы, чтобы указать позицию назад от конца структуры, вы можете указать диапазон для извлечения подмножества ... это также работает для списков, массивов и (под) строк. Он работает с правой стороны присваивания ( =
), он работает и с левой стороны (вы можете назначить подстроку, таким образом заменяя часть строки). Таким образом, вам не нужна функция substring_replace
, вы просто используете существующую общую концепцию.
Автор Ruby выразил это в терминах удовлетворения ожиданий пользователя (то есть программиста): Должно быть как можно меньше сюрпризов, всякий раз, когда здравый смысл заставляет вас ожидать, что что-то работает определенным образом, так и должно быть. Он очень много работал, чтобы удовлетворить это требование. Кроме того, хотя Ruby немного позаимствовал у Perl, автор не согласен с принципом Perl TMTOWTDI в пользу Zen of Python: «Должен быть один - и желательно только один - очевидный способ сделать это».
Также приятно, что Ruby делает замыкания ( = блоки кода), поэтому вы можете указать функцию, просто заключив ее в фигурные скобки. Есть места, где уместно указывать встроенную функцию, и Ruby позволяет вам делать это удобно.
Ruby позволяет вам делать что-то с небольшим объемом кода, потому что его конструкции очень хорошо сочетаются друг с другом. Я пробуюсь в Project Euler и обнаружил, что часто самые короткие разборчивые и понятные решения были сделаны на Ruby. Самые короткие - на J, но это диалект APL, и для непосвященных он выглядит как линейный шум.
Мой личный опыт подтверждает это: Я изучил Ruby и Rails и написал веб-приложение со средним и сложным анализом данных за одну неделю. Каждый принцип, который я усвоил, я мог применить в разных местах с разными данными - It Just Works ™!
По моему опыту, блоки - самый важный фактор, способствующий элегантности Ruby. что более элегантно, чем писать каждое для перебора массивов / хэшей / и т. д.
arr = ["one", "two", "three"]
arr.each { |e|
puts e
}
Однако я считаю, что это нечто большее, элегантность языка Ruby также исходит от библиотек. Большинство библиотек продолжают использовать уникальный Ruby «стиль» для имен функций, такой как «each» для итераций или использование «!». а также '?' в конце имен функций для деструктивных / логических возвращаемых функций это то, что действительно делает Ruby «элегантным».
Ruby и DSL обсуждались а много .
Пример из sinatra :
get '/' do
'Hello world!'
end
Или из этого блога :
ChessGame.new do |move|
move.black_pawn(forward)
move.white_pawn(forward)
#…
move.white_queen(pwn_king)
end
Я не могу утверждать, что это элегантно, я думаю, что в целом элегантность определяется реализацией программиста. Однако я могу утверждать, что он краток, и я думаю, что многие люди действительно чувствуют это, когда говорят, что Ruby элегантен. Часто код, который быстро собирается, кажется элегантным.
Вы можете увидеть результаты перебора языков программирования здесь . Вы заметите, что Ruby 1.9 прижат к левой стороне, что означает, что он очень краткий. Держу пари, что всякий, кто говорит об элегантности языка, говорит о языке, который находится либо слева, либо близко. Haskell - одно из немногих известных мне исключений, которое требует больших усилий для выполнения определенных задач, но при этом кажется чрезвычайно элегантным.
Поскольку ваши div position: absolute
, они на самом деле не вложены в позицию. На вашей странице jsbin я изменил порядок div в HTML на:
<div class="child"><div class="parent"></div></div>
, и красный прямоугольник закрыл синий прямоугольник, который, я думаю, именно то, что вы ищете.
Сумма всего вышесказанного такова, что с помощью Ruby вы можете получить:
Таким образом, имея читаемый и краткий код -> меньше кода для написания -> меньше кода для тестирования и поддержки -> Производительность .
Я не должен забывать упомянуть великое поддерживающее сообщество, стоящее за Ruby.
Просто забавное примечание: это похоже на php , но это Ruby (с сегодняшнего дня), но первый ответ кажется элегантным Ruby. В PHP я закончил тем, что написал глупый длинный код, вроде связанного сообщения, чтобы делать мелочи. Отчасти потому, что лямбды практически не существуют. Поэтому я должен сказать, что поддержка лямбда Ruby вместе с map / reduce - вот что делает его элегантным для меня.
но первый ответ кажется элегантным Ruby. В PHP я закончил тем, что написал глупый длинный код, вроде связанного сообщения, чтобы делать мелочи. Отчасти потому, что лямбды практически не существуют. Поэтому я должен сказать, что поддержка лямбда Ruby вместе с map / reduce - вот что делает его элегантным для меня. но первый ответ кажется элегантным Ruby. В PHP я закончил тем, что написал глупый длинный код, вроде связанного сообщения, чтобы делать мелочи. Отчасти потому, что лямбды практически не существуют. Поэтому я должен сказать, что поддержка лямбда-выражения Ruby вместе с map / reduce - вот что делает его элегантным для меня.все является объектом (пс. Как в smalltalk ..):
3.times { p "olleh" }
расширяемые / открытые классы (например, из Rails):
10.days_ago
.. и другие на ruby elegance : http://www.benhughes.name/files/presentations/ruby_elegance.pdf