Ruby中的子串语法

时间:2014-02-11 12:54:54

标签: ruby

Python具有以下优雅语法,用于检查一个字符串是否是另一个字符串的子字符串:

'ab' in 'abc' # True

Ruby中是否有同等优雅的语法?

我知道"abc".includes? "ab" Ruby语法,但我想知道逆语法是否也存在(第一个参数是子字符串,第二个是字符串)。

2 个答案:

答案 0 :(得分:7)

Ruby标准库中没有这样的方法,但是 Rails ActiveSupport提供了#.in?方法:

1.9.3-p484 :004 > "ab".in? "abc"
 => true

以下是源代码:https://github.com/rails/rails/blob/e20dd73df42d63b206d221e2258cc6dc7b1e6068/activesupport/lib/active_support/core_ext/object/inclusion.rb

答案 1 :(得分:4)

定义“优雅”。

这会进行子字符串搜索并返回“hit”(如果找到):

'abc'['ab'] # => "ab"

使用!!将返回的值转换为true / false,因此"ab"变为true:

!!'abc'['ab'] # => true

知道如果你想要更接近的东西,添加它是微不足道的:

class String
  def in?(other)
    !!other[self]
  end
end

'ab'.in?('abc') # => true
'ab'.in? 'abc' # => true

或者,使用require 'active_support/core_ext/object/inclusion'来挑选扩展所有对象以允许in?的Active Suport定义。见http://edgeguides.rubyonrails.org/active_support_core_extensions.html#in-questionmark。它正在修改所有对象的上行/下行。