ruby 露比是什么意思?

ffscu2ro  于 2023-04-29  发布在  Ruby
关注(0)|答案(1)|浏览(207)

我对ruby很陌生,我看到了一行if !'Region' .in? region.in?是什么意思我试着在所有的博客中搜索这个,但找不到。如有相关文件请分享。

zfciruhq

zfciruhq1#

foo.in?(bar)foo引用的对象上调用名为in?的方法,并将表达式bar的计算结果作为参数传递。
与所有面向对象的语言一样,调用方法的对象决定了方法的含义。所以,如果你想知道in?是什么意思,你必须看看foo是什么类型的对象,然后检查in?的定义是从哪里来的,然后阅读该方法的文档。
你用ruby标记了你的问题,但是Ruby中没有为String定义in?方法。因此,该方法必须来自其他地方,可能是某个第三方库。
你还用ruby-on-rails-3标记了问题。Ruby on Rails包括activesupport RubyGem,它将许多Core Extensions添加到Ruby核心库中。其中一个核心扩展是测试 inclusion

2.14 in?

predicate in?测试一个对象是否包含在另一个对象中。如果传递的参数不响应include?,则会引发ArgumentError异常。
in?的例子:

1.in?([1,2])        # => true
"lo".in?("hello")   # => true
25.in?(30..50)      # => false
1.in?(1)            # => ArgumentError

Here is the documentation which is part of Ruby on Rails 3.2.16

in?(*args)

如果此对象包含在参数中,则返回true。参数必须是响应#include?的任何对象,也可以选择传入多个参数。使用方法:

characters = ["Konata", "Kagami", "Tsukasa"]
"Konata".in?(characters) # => true

character = "Konata"
character.in?("Konata", "Kagami", "Tsukasa") # => true

如果传入一个参数,并且它不响应#include?,则会抛出ArgumentError
这就是它是如何实现的:

def in?(*args)
  if args.length > 1
    args.include? self
  else
    another_object = args.first
    if another_object.respond_to? :include?
      another_object.include? self
    else
      raise ArgumentError.new("The single parameter passed to #in? must respond to #include?")
    end
  end
end

如你所见

'Region'.in?(region)

仅委托给

region.include?('Region')

在Ruby on Rails的现代版本中,它仍然存在:

in?(another_object)

如果此对象包含在参数中,则返回true。参数必须是响应#include?的任何对象。使用方法:

characters = ["Konata", "Kagami", "Tsukasa"]
"Konata".in?(characters) # => true

如果参数不响应#include?,则会抛出ArgumentError
如您所见,行为发生了轻微变化:对多个参数的支持已被删除。因此,现在的实现简单地:

def in?(another_object)
  another_object.include?(self)
rescue NoMethodError
  raise ArgumentError.new("The parameter passed to #in? must respond to #include?")
end

你可以很容易地找到大部分的这一点,只要问Ruby:

# Grab the method:
meth = 'Region'.method(:in?)

# Ask the method who its owner is:
meth.owner
#=> Object

# Ask the method where it is defined:
meth.source_location
#=> ['lib/ruby/gems/3.2.0/gems/activesupport-7.0.4.3/lib/active_support/core_ext/object/inclusion.rb', 12]

请注意,Ruby on Rails 3已经过时了。它已经很多年没有被维护了,它不适用于当前的Ruby版本,并且它有未修补的安全漏洞。你应该 * 强烈 * 考虑更新到一个受支持和维护的Ruby on Rails版本。

相关问题