9

我想做这个测试:

if (line.blank?) do_stuff

...但我是纯红宝石,而不是铁轨。实现相同效果的公认习语是什么?

我正在为一个字符串执行此操作,在哪里测试 .empty?与测试.blank 不同吗?(全空白字符串不是空的,而是空白的。)

4

6 回答 6

9

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

您不能询问字符串是否为 nil,因为它没有nil?方法,但您可以询问 Nil 是否为nil?.

Active Support 有可用的核心扩展,让我们可以挑选所需的功能并包含必要的方法。blank?你可以这样做:

require 'active_support/core_ext/object/blank'

有关blank?更多信息,请参阅 并阅读整个文档以查看还有什么可用的。以这种方式使用 Active Support 无需加载所有 AS 并获得有用的功能。

于 2013-07-01T05:13:48.160 回答
9

这个有可能:

line.to_s.strip.empty?
于 2013-07-01T04:16:16.837 回答
7

来自ActiveSupport

line !~ /[^[:space:]]/
于 2013-07-01T04:24:12.753 回答
2

添加到@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.937k i/100ms
               regex   120.402k i/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?要走的路

于 2018-08-14T19:32:08.150 回答
0
if line.empty? || line.nil?

你可以把它包在一个空白中吗?线类中的方法

于 2013-07-01T04:13:06.413 回答
0

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

于 2013-07-01T04:12:12.337 回答