def visit(source, target, &block)
      # clear the match hashes
      @matches.clear
      @id_mtchs.clear
      # seed the matches with the top-level source => target
      add_match(source, target)
      # Visit the source reference.
      super(source) { |src| visit_matched(src, &block) }
    end
def visit(source, target, &block)
      # clear the match hashes
      @matches.clear
      @id_mtchs.clear
      # seed the matches with the top-level source => target
      add_match(source, target)
      # Visit the source reference.
      super(source) { |src| visit_matched(src, &block) }
    end
Creates a new visitor which matches source and target domain object references.
 The domain attributes to visit are determined by calling the selector block given to
 this initializer. The selector arguments consist of the match source and target.

 @param (see ReferenceVisitor#initialize)
 @option opts [Proc] :mergeable the block which determines which attributes are merged
 @option opts [Proc] :matchable the block which determines which attributes to match
   (default is the visit selector)
 @option opts [:match] :matcher an object which matches sources to targets
 @option opts [Proc] :copier the block which copies an unmatched source
 @yield (see ReferenceVisitor#initialize)
 @yieldparam [Resource] source the matched source object
 Visits the source and target.

 If a block is given to this method, then this method returns the evaluation of the block on the visited
 source reference and its matching copy, if any. The default return value is the target which matches
 source.

 @param [Resource] source the match visit source
 @param [Resource] target the match visit target
 @yield [target, source] the optional block to call on the matched source and target
 @yieldparam [Resource] source the visited source domain object
 @yieldparam [Resource] target the domain object which matches the visited source
 @yieldparam [Resource] from the visiting domain object
 @yieldparam [Property] property the visiting property