-
Notifications
You must be signed in to change notification settings - Fork 0
JRubyMethod_Signatures
==Rules==
- ThreadContext is optional and must always come as the first argument.
- Block is optional and must always come as the last argument.
- If the Java method is static, it must have a self argument as the first argument or immediately following ThreadContext.
- Specific argument counts are supported for 0 to 3 arguments. All signatures that require more than 3 arguments must use an argument array.
- If there are multiple methods that are named the same but take different argument counts, they will be used to provide separate methods for optional arguments.
- If a method has required arguments but also accepts a rest arg, you should either specify it as an argument array or specify all argument counts up to the required count plus an argument version.
So a rough specification for the signature would be as follows:
public [static] IRubyObject methodname( [ThreadContext context, ] [IRubyObject self, ] IRubyObject arg0 [, ... IRubyObject arg2 | IRubyObject[] args] [, Block block]) { ...
==Examples==
-
One required argument, no ThreadContext, no Block
@JRubyMethod public IRubyObject method(IRubyObject arg0) {
-
Two required arguments, static, ThreadContext, no Block
@JRubyMethod public static IRubyObject method(ThreadContext context, IRubyObject self, IRubyObject arg0) {
-
One required argument, no ThreadContext, no Block, with rest arg
// this is called if only no args are passed @JRubyMethod public static IRubyObject method() { ... // you should raise error here
// this is called if one arg is passed @JRubyMethod public static IRubyObject method(IRubyObject arg0) { ...
// this is called if two or more args are passed @JRubyMethod public static IRubyObject method(IRubyObject[] args) { ...
-
One required argument, one optional argument, no ThreadContext, no Block
// this is called if one argument is passed @JRubyMethod public static IRubyObject method(IRubyObject arg0) { ...
// this is called if two arguments are passed @JRubyMethod public static IRubyObject method(IRubyObject arg0, IRubyObject arg1) { ...