如何在 haml 的不同分支中执行两次操作

How to do something twice in different branches in haml

我的代码有点像这样:

- say_hi = proc do |to_who|
  .himessage
    Hi
    = to_who
.foo
  .bar
    = say_hi.call "bob"
  = say_hi.call "joe"

我想要的输出是:

<div class='foo'>
  <div class='bar'>
    <div class='himessage'>
      Hi
      bob
    </div>
  </div>
  <div class='himessage'>
    Hi
    joe
  </div>
</div>

相反,我得到:

<div class='himessage'>
  Hi
  bob
</div>
<div class='himessage'>
  Hi
  joe
</div>
<div class='foo'>
  <div class='bar'>
    2
  </div>
  1
</div>

似乎文本被插入到定义过程的位置,而不是被调用的位置。我对 haml 的内部结构没有足够的了解,不知道为什么会这样,我关心的是:如何在保持代码干燥的同时获得所需的输出?

注意:在我的实际项目中,与 say_hi 过程等效的过程要长得多且复杂得多,因此简单地重复两次会非常难看。以上只是最简单的情况,没有明显的解决方案就会导致这个问题。

需要使用capture_haml,否则调用proc时Haml会直接写入输出:

- say_hi = proc do |to_who|
  - capture_haml do
    .himessage
      Hi
      = to_who
.foo
  .bar
    = say_hi.call "bob"
  = say_hi.call "joe"