这是我所追求的一个例子:
def already_taken?
# Magic goes here...
end
"Charlotte".already_taken?
是否有可能构造一种方法,使我可以直接在String对象上调用它而无需修改String类本身?
答案 0 :(得分:2)
您可以使用自定义模块修补String类:
module MyStringPatch
def already_taken?
'yes'
end
end
String.include MyStringPatch
"Charlotte".already_taken?
答案 1 :(得分:2)
如果您想将方法添加到任何类(在这种情况下为String
)而不用猴子修补它,则应考虑使用Refinements。
module StringRefinements
refine String do
def already_taken?
puts "yes!"
end
end
end
# in another file...
using StringRefinements
"Charlotte".already_taken?
already_taken?
方法仅在调用using StringRefinements
的作用域中可用,而在其他任何地方都不能使用。