我需要active_support/inflector
,现在我可以在字符串上使用pluralize
方法了。
require 'active_support/inflector'
module Foodie
class Food
def self.pluralize(word)
word.pluralize
end
end
end
p Foodie::Food.pluralize("foo") #=> foos
但我希望必须将ActiveSupport::Inflector
模块作为mixin包含在其中才能发挥作用。
为什么我不需要像:
module Foodie
class Food
include ActiveSupport::Inflector
def self.pluralize(word)
word.pluralize
end
end
end
p Foodie::Food.pluralize("foo") #=> foos
此外,上述示例仍有效。
我认为需要文件的重点只是让您可以访问该文件中的classes / modules / methods / variables,但它并不一定包含所有模块和类中的功能。
也许,是因为带有Inflector模块的ruby文件正在打开字符串类吗?就像在这个例子中一样:
foo.rb:
module Foo
end
class String
def cats
self + " cats"
end
end
bar.rb:
require_relative 'foo'
p "foobar".cats #=> "foobar cats"
会喜欢一些指导:)
答案 0 :(得分:2)
你是对的,String在这里被monkeypatched:
这将包含在您需要的模块中: https://github.com/rails/rails/blob/92703a9ea5d8b96f30e0b706b801c9185ef14f0e/activesupport/lib/active_support/inflector.rb#L7