我想做这个测试:
if (line.blank?) do_stuff
...但我是纯红宝石,而不是铁轨。实现相同效果的公认习语是什么?
我正在为一个字符串执行此操作,在哪里测试 .empty?与测试.blank 不同吗?(全空白字符串不是空的,而是空白的。)
我想做这个测试:
if (line.blank?) do_stuff
...但我是纯红宝石,而不是铁轨。实现相同效果的公认习语是什么?
我正在为一个字符串执行此操作,在哪里测试 .empty?与测试.blank 不同吗?(全空白字符串不是空的,而是空白的。)
blank?
不仅在 String 中定义,它也是 Nil 的一部分,因为它是一个双重测试。它检查变量是否是nil?
/empty?
空白。
您不能询问字符串是否为 nil,因为它没有nil?
方法,但您可以询问 Nil 是否为nil?
.
Active Support 有可用的核心扩展,让我们可以挑选所需的功能并包含必要的方法。blank?
你可以这样做:
require 'active_support/core_ext/object/blank'
有关blank?
更多信息,请参阅 并阅读整个文档以查看还有什么可用的。以这种方式使用 Active Support 无需加载所有 AS 并获得有用的功能。
这个有可能:
line.to_s.strip.empty?
line !~ /[^[:space:]]/
添加到@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?
要走的路
if line.empty? || line.nil?
你可以把它包在一个空白中吗?线类中的方法
blank?
基本上只是检查empty? || nil?
。因此,您可以自己制作空白方法,也可以在条件句中同时检查它们。