是否有更严格范围的开始/结束的替代方案?

时间:2017-04-22 23:05:12

标签: crystal-lang

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

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

我发布它可以使用-> {}.call(但这会创建一个不需要的闭包)。还有1.times { ... },但这看起来很糟糕。在语言本身中是否存在这种惯用语的快捷方式?

1 个答案:

答案 0 :(得分:0)

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

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'?)