|
From: Benoit L. <lom...@ex...> - 2017-09-25 19:29:35
|
Dear All,
I have an issue with calling java varargs function from jython. I use
Jython 2.7.0 from ImageJ.
My Java function expects Object... as parameter. When calling it from
jython everything goes fine unless one of the parameter is a list. In
that case the script complains that the Java function expects a single
parameter but received more. I put a toy example below to illustrate. If
anyone has idea to circumvent that issue, I'd be really grateful.
In practice I am trying to write a small library in Java to wrap some
image analysis functions. The goal is to make the function easy to use
for people getting started with scripting. Basically I try to avoid java
import in the script as well as conversions or unecessary syntax that
could be confusing to beginners. Ideally I'd like user to pass for
instance an image and a list of number (representing the size of a voxel
or a filter size for instance) and the jython list would be interpreted
on the Java side as List<Float> or Float[]. Any advice to go in that
direction would be super welcome.
Thanks!
Benoit
// java side
public class myClass{
public void test( Object... args ){
for(Object object : args)
System.out.println( object.toString() );
}
}
# jython side
import myClass
myClass().test("hello", 1 ) # this works fine
myClass().test( [ 1, 1 ] ) # this works fine too
myClass().test("hello", [ 1 , 1 ] ) # this crashes with: "TypeError:
test(): expected 1 args; got 2"
myClass().test( [ "hello", [ 1 , 1 ] ] ) # seems to work too
PS: I've seen that putting all the parameters in a list would be
workaround. By chance does jython 2.7.1 would allow to avoid these
additionnal bracket?
--
Benoit Lombardot, PhD
Bio-Image Informatics team leader
Scientific Computing Facility
Max Planck Institute CBG
Pfotenhauer Str. 108, 01307 Dresden
room: 009 (CSBD)
phone: +49 351 210 2544
|