Так, необходимо решить, можно ли иметь дело с округлением перед вызовом ToString () или необходимо ли найти некоторый другой механизм, который будет иметь дело с округлением результатов, поскольку они преобразовываются в строку. Или можно продолжить использовать десятичную систему исчисления, так как это останется точным, и это станет быстрее, как только машины выпущены, которые поддерживают новую десятичную систему исчисления IEEE 754 в аппаратных средствах.
Обязательная перекрестная ссылка: , Что Каждый Программист Должен Знать Об Арифметике С плавающей точкой . Это - один из многих возможных URL.
информация о десятичной системе исчисления и новом стандарте IEEE 754:2008 в этом сайт Speleotrove .
Это функция, а не ошибка. Многострочные блоки Haml намеренно громоздки - в том числе трудно следовать один за другим - потому что почти всегда лучше поместить этот код Ruby в помощник. Даже если помощник будет вызван только один раз, ваш шаблон будет намного легче читать. Например:
def blatz_link
call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3',
:foo4 => 'bar4', :foo5 => 'bar5'
end
def blootz_link
call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3',
:foo4 => 'bar4', :foo5 => 'bar5'
end
Затем в вашем Haml просто введите
= blatz_link
= blootz_link
, который будет намного более читаемым и легким для понимания.
Если вам абсолютно необходимо следовать за одним многострочным блоком другим, просто добавьте комментарий между ними:
= call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3', |
:foo4 => 'bar4', :foo5 => 'bar5' |
-#
= call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3', |
:foo4 => 'bar4', :foo5 => 'bar5' |
Вы можете использовать блок для своего помощника, выдавая все, что имеет смысл.
module SomeHelper
def call_to_helper
foo = Foo.new
yield foo
# build your html here, using the foo object's attributes
end
class Foo
attr_accessor :foo1, :foo2, :foo3, :foo4, :foo5
end
end
Теперь о вашем haml :
= call_to_helper do |foo|
-foo.foo1 = 'bar1'
-foo.foo2 = 'bar2'
-foo.foo3 = 'bar3'
-foo.foo4 = 'bar4'
-foo.foo5 = 'bar5'
= call_to_helper do |foo|
-foo.foo1 = 'bar1'
-foo.foo2 = 'bar2'
-foo.foo3 = 'bar3'
-foo.foo4 = 'bar4'
-foo.foo5 = 'bar5'
Это хак (вроде), но вы всегда можете использовать «+» вместо «=» во 2-й, 3-й и т. Д. Строках в цепочке.
= call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3', |
:foo4 => 'bar4', :foo5 => 'bar5' |
+ call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3', |
:foo4 => 'bar4', :foo5 => 'bar5' |
Я столкнулся с теми же проблемами и обходными путями, что и раньше упомянутое здесь, и странное (и да, это странное) поведение HAML в отношении многострочных блоков укусило меня довольно много раз. Я знаю, что это сделано намеренно и, вероятно, было сделано для того, чтобы заставить пользователя упростить чтение кода. Однако хорошо известно, что у каждого разработчика есть свои предпочтения в отношении структурирования кода. HAML - единственный язык, который я знаю (c, c ++, ruby, python, HTML и т. Д.). ), который пытается наложить такие ограничения.
Вызов странной многострочной обработки функции, а не ошибки, просто указывает на ошибочный дизайн языка. В конце концов, это всегда будет ошибкой в глазах пользователя. Многострочная поддержка является базовой функцией любого основного потокового языка, и отсутствие этой функции просто раздражает - как и скрепка M $, которая, как я считаю, также была попыткой направить пользователя.
При этом, как говорится, HAML - фантастически компактный и полезный язык для написания HTML. Те из нас, кто (в некоторых случаях) предпочитает многострочные блоки, просто хотели бы, чтобы им была предложена какая-то опция конфигурации для включения / отключения достойной поддержки многострочных блоков - независимо от личного определения разработчика языка «легко читаемого кода». ".
Я думаю, пока мы не доберемся туда, мы будем"