如何测试块是否为空?

发布于 2024-11-27 20:49:36 字数 47 浏览 0 评论 0原文

我有一个代码块,我想在不运行代码块内部的代码的情况下测试主体是否为空。这可能吗?

I have a block of code and I'd like to test if the body is empty without running the code inside of the block. Is that possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

神爱温柔 2024-12-04 20:49:36

sourcify gem 添加了一个 Proc#to_source 方法:

>> require 'sourcify'
=> true
>> p = Proc.new {}
=> #<Proc:0x000001028490b0@(irb):3>
>> p.to_source
=> "proc { }"

将块作为字符串后,就很容易看出大括号之间是否有注释(或只有空格)。

The sourcify gem adds a Proc#to_source method:

>> require 'sourcify'
=> true
>> p = Proc.new {}
=> #<Proc:0x000001028490b0@(irb):3>
>> p.to_source
=> "proc { }"

Once you have the block as a string it's fairly easy to see if there's noting (or only whitespace) between the curly braces.

情释 2024-12-04 20:49:36

更新:Ruby 2.0+ 删除了块比较,因此不再可能仅使用内置方法。

Ruby 过去常常比较 Proc,但不太擅长。例如,您可以:

def is_trivial_block?(&block)
  block == Proc.new{}
end

is_trivial_block?{} # => true
is_trivial_block?{ 42 } # => false
# but caution:
is_trivial_block?{|foo|} # => false

因此,决定删除块比较,因此两个块现在 == ,前提是它们是同一对象。

Update: Ruby 2.0+ removed block comparison, so it is no longer possible using only the builtin methods.

Ruby used to compare Procs, but was not great at it. For instance you could:

def is_trivial_block?(&block)
  block == Proc.new{}
end

is_trivial_block?{} # => true
is_trivial_block?{ 42 } # => false
# but caution:
is_trivial_block?{|foo|} # => false

Because of this, it was decided to remove the block comparison, so two blocks are now == iff they are the same object.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文