Ruby:空白? 没有Rails

我想要这个测试:

if (line.blank?) do_stuff 

…但我是直的ruby,而不是铁轨。 实现同样效果的公认成语是什么?

我正在为一个字符串做这个,测试.empty? 与测试.blank不一样? (所有空白字符串不为空,但为空。)

来自ActiveSupport

 line !~ /[^[:space:]]/ 

blank? 不仅在String中定义,它也是Nil的一部分,因为它是一个双重测试。 它检查变量是否nil? 还是empty? /白色空间。

你不能问一个字符串,如果它是零,因为它没有nil? 方法,但如果没有,你可以问一个nil?

Active Support提供了核心扩展,让我们可以挑选所需的function并包含必要的方法。 blank? 你可以做:

 require 'active_support/core_ext/object/blank' 

看到blank? 有关更多信息,请阅读整个文档以查看其他可用内容。 通过这种方式使用Active Support,无需加载所有AS,即可获得有用的function。

这个有可能:

 line.to_s.strip.empty? 

blank? 基本上只是检查empty? || nil? empty? || nil? 。 因此,您可以自己制作空白方法,也可以在条件中检查它们。

 if line.empty? || line.nil? 

你可以将它包装成空白吗? 您的类中的方法

添加到@sawa的答案

 pry(main)> Benchmark.ips do |x| pry(main)* x.report("strip") { " ".strip.empty? } pry(main)* x.report("regex") { " " !~ /\S/ } pry(main)* x.compare! pry(main)* end Warming up -------------------------------------- strip 199.937ki/100ms regex 120.402ki/100ms Calculating ------------------------------------- strip 4.205M (± 3.6%) i/s - 21.193M in 5.047231s regex 2.019M (± 3.7%) i/s - 10.114M in 5.017202s Comparison: strip: 4204798.7 i/s regex: 2018957.6 i/s - 2.08x slower 

所以if line.to_s.strip.empty? 是要走的路