From ellis at stat.harvard.edu  Fri Mar 25 11:30:01 2005
From: ellis at stat.harvard.edu (Byron Ellis)
Date: Fri Mar 25 11:30:20 2005
Subject: [Rd] S4 methods semantics questions
Message-ID: <422af62516432df52f025c8bf6d3e48c@stat.harvard.edu>

Some quick questions about S4 methods.

Does the typing of S4 methods mean that lazy evaluation is no longer 
possible? It seems that you would need to evaluate the arguments to 
determine their type at dispatch.

Second, what role, if any, do default arguments play in S4 methods? I 
notice that you can put default arguments into generics but that the 
dispatch is still done on the type of the calling argument rather than 
the default argument, though the default arg is substituted. However, 
default values for arguments in method definition seem to be stripped 
or, more likely, overridden at dispatch by the calling argument (i.e. 
"missing").

Some examples:

setGeneric("foo",function(x="bar") standardGeneric("foo"))
setMethod("foo","missing",function(x) print(x))

 >foo()
[1] "bar"

setGeneric("foo",function(x,y) standardGeneric("foo"))
setMethod("foo","numeric",function(x,y=2) x+y)

 >foo(1)
Error in foo(1) : argument "y" is missing, with no default

---
Byron Ellis (ellis@stat.harvard.edu)
"Oook" -- The Librarian


[Rd] S4 methods semantics questions
Byron Ellis