regexp/match_dispatch_no_parens.rb
tests/_examples/regexp/match_dispatch_no_parens.rb in the metorex repository.
# A string matched against another string refuses outright, and one matched
# against anything else hands the match to that object.
begin
"some string" =~ "another string"
rescue TypeError => refused
puts refused.message
end
class Matcher
def =~(other)
"matched #{other}"
end
end
puts "w00t" =~ Matcher.new
# `match` reads a pattern written as anything that answers to_str.
class Pattern
def to_str
"l+"
end
end
puts "hello".match(Pattern.new)[0]
# A pattern carrying a `match` of its own answers for the string.
pattern = /./.dup
def pattern.match subject
"asked #{subject}"
end
puts "hello".match(pattern)
puts pattern.match "hello"
Output:
type mismatch: String given
matched w00t
ll
asked hello
asked hello