begin/end 是否有更严格范围的替代方案?

Are there alternatives to begin/end with stricter scope?

在 Crystal 中,是否有以下替代方法,但没有在 end 之后创建 b 的值?

  my_val = begin
    a = 1
    b = 2
    a + b
  end
  b should be undefined here.

我宣布可以使用 -> {}.call(但这会创建一个不需要的关闭)。还有 1.times { ... },但这看起来很老套。语言本身是否有惯用的捷径?

对于您的特定情况,以下可能不是惯用的,但根据您想要实现的目标,这可能是一个很好的注意事项:

myval = {% begin %}
  a = 1
  b = 2
  a + b
{% end %}

myval #=> 3
b     #=> undefined local variable or method 'b' (did you mean 'p'?)

方法

def myval
  a = 1
  b = 2
  a + b
end

myval #=> 3
b     #=> undefined local variable or method 'b' (did you mean 'p'?)

阻止

myval = :any.try do
  a = 1
  b = 2
  a + b
end

myval #=> 3
b     #=> undefined local variable or method 'b' (did you mean 'p'?)