Несколько многострочные блоки HAML

  1. Да; арифметика программного обеспечения действительно в 100 раз медленнее, чем аппаратные средства. Или по крайней мере, это намного медленнее, и фактор 100, плюс-минус порядок величины, о праве. Назад в плохие былые времена, когда Вы не могли предположить, что каждые 80386 имели 80 387 сопроцессоров с плавающей точкой, тогда у Вас было программное моделирование двоичной плавающей точки также, и это было медленно.
  2. Нет; Вы живете на фэнтезийной земле, если Вы думаете, что чистая двоичная плавающая точка может когда-либо точно представлять все десятичные числа. Двоичные числа могут объединить половины, четверти, восьмые, и т.д., но так как точное десятичное число 0,01 требует двух факторов одной пятой и одного фактора одной четверти (1/100 = (1/4) * (1/5) * (1/5)) и так как одна пятая не имеет никакого точного представления в двоичном файле, Вы не можете точно представить все десятичные значения с двоичными значениями (потому что 0.01 контрпример, который не может быть представлен точно, но представительный для огромного класса десятичных чисел, которые не могут быть представлены точно).
  3. Так, необходимо решить, можно ли иметь дело с округлением перед вызовом ToString () или необходимо ли найти некоторый другой механизм, который будет иметь дело с округлением результатов, поскольку они преобразовываются в строку. Или можно продолжить использовать десятичную систему исчисления, так как это останется точным, и это станет быстрее, как только машины выпущены, которые поддерживают новую десятичную систему исчисления IEEE 754 в аппаратных средствах.

    Обязательная перекрестная ссылка: , Что Каждый Программист Должен Знать Об Арифметике С плавающей точкой . Это - один из многих возможных URL.

    информация о десятичной системе исчисления и новом стандарте IEEE 754:2008 в этом сайт Speleotrove .

18
задан Matchu 24 September 2009 в 22:06
поделиться

4 ответа

Это функция, а не ошибка. Многострочные блоки 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' |
28
ответ дан 30 November 2019 в 06:59
поделиться

Вы можете использовать блок для своего помощника, выдавая все, что имеет смысл.

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'
3
ответ дан 30 November 2019 в 06:59
поделиться

Это хак (вроде), но вы всегда можете использовать «+» вместо «=» во 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' |
2
ответ дан 30 November 2019 в 06:59
поделиться

Я столкнулся с теми же проблемами и обходными путями, что и раньше упомянутое здесь, и странное (и да, это странное) поведение HAML в отношении многострочных блоков укусило меня довольно много раз. Я знаю, что это сделано намеренно и, вероятно, было сделано для того, чтобы заставить пользователя упростить чтение кода. Однако хорошо известно, что у каждого разработчика есть свои предпочтения в отношении структурирования кода. HAML - единственный язык, который я знаю (c, c ++, ruby, python, HTML и т. Д.). ), который пытается наложить такие ограничения.

Вызов странной многострочной обработки функции, а не ошибки, просто указывает на ошибочный дизайн языка. В конце концов, это всегда будет ошибкой в ​​глазах пользователя. Многострочная поддержка является базовой функцией любого основного потокового языка, и отсутствие этой функции просто раздражает - как и скрепка M $, которая, как я считаю, также была попыткой направить пользователя.

При этом, как говорится, HAML - фантастически компактный и полезный язык для написания HTML. Те из нас, кто (в некоторых случаях) предпочитает многострочные блоки, просто хотели бы, чтобы им была предложена какая-то опция конфигурации для включения / отключения достойной поддержки многострочных блоков - независимо от личного определения разработчика языка «легко читаемого кода». ".

Я думаю, пока мы не доберемся туда, мы будем"

9
ответ дан 30 November 2019 в 06:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: