Hello Igor, thanks for the quick response!
Am 20.06.2011 um 14:25 schrieb Igor Peshansky: > Hi, Manfred, > > DistArray is a generic type. Thus, you always have to specify the > appropriate type arguments when referring to an instance of that type > (like in the formals for printDistArray()). > > All generic types in X10 are invariant. > So, a DistArray[Int{c}] > cannot be assigned to a variable (or passed into a formal) of type > DistArray[Int] (the constraint makes it a different type). Because > you did not specify it explicitly, the type of the elements in the > array is actually inferred from the initializer argument of > DistArray.make() (which is a literal "0"). Ok, this sounds reasonable. However, after reading through the language specification again I could not directly find the info about the invariance of generic types and the resulting implications for using them as parameter types. Maybe this could be explained a little bit more extensively. > To fix this, you can do one of three things: > (a) force the element > type when constructing the array, e.g., > DistArray.make[Int](distribution, 0), > (b) make the formal type of > printDistArray() match the inferred type of the argument, i.e., > printDistArray(distArray:DistArray[Int{self==0}]), > or (c) make > printDistArray generic and let the system infer the type, e.g., def > printDistArray[U](distArray: DistArray[U]) { ... }. I went with suggestion c) because the array is not always initialised with Integers. Now everything is working great. Thanks again, Manfred > Hope this helps, > Igor > > 2011/6/20 Kröhnert, Manfred <manfred.kroehn...@kit.edu>: >> Hello all, >> >> I am using the current X10 v2.2 release on OS X 10.6.7 with the C++ backend >> and it gives me trouble with the following code: >> >> ------------------------------------------------- >> import x10.array.DistArray; >> >> public class Test { >> public static def main(args: Array[String]) { >> val region = 0 .. 79; >> >> val distribution = Dist.makeBlock(region); >> val array = DistArray.make(distribution, 0); >> printDistArray(array); >> } >> >> static def printDistArray(distArray: DistArray) : void >> { >> Console.OUT.println(distArray); >> } >> } >> ------------------------------------------------- >> >> Compiling it produces the following error: >> >> Test.x10:9: No valid method call found for call in given type. >> Call: printDistArray(x10.array.DistArray[x10.lang.Int]) >> Type: Test >> Test.x10:12: Type is missing parameters. >> Type: x10.array.DistArray >> Expected parameters: [T] >> 2 errors. >> >> >> Changing the parameter type to 'distArray: DistArray[Int]' produces this >> compiler error: >> >> Test.x10:9: Parameter 0 does not have the expected base type. >> Formal base type: x10.array.DistArray[x10.lang.Int] >> Actual base type: x10.array.DistArray[x10.lang.Int{self==0, >> horizontalDist.region.zeroBased==true, horizontalDist.region.rect==true, >> horizontalDist.region.rank==1, horizontalDist.region!=null, >> x10.array.PlaceGroup.WORLD!=null, region.zeroBased==true, region.min==0, >> region.max==79, region!=null}]{self==h_sum, h_sum.dist==horizontalDist, >> h_sum!=null, horizontalDist.region.zeroBased==true, >> horizontalDist.region.rect==true, horizontalDist.region.rank==1, >> horizontalDist.region!=null, x10.array.PlaceGroup.WORLD!=null, >> region.zeroBased==true, region.min==0, region.max==79, region!=null} >> (method static Test.printDistArray(arg93: >> x10.array.DistArray[x10.lang.Int])) >> 1 error. >> >> >> And my last try was to use the type Any like this 'distArray: >> DistArray[Any]' which also results in an error: >> >> Test.x10:9: No valid method call found for call in given type. >> Call: printDistArray(x10.array.DistArray[x10.lang.Int]) >> Type: Test >> 1 error. >> >> Can anybody give me a hint on how to achieve this correctly or is this a bug >> in X10 somehow? >> I would have expected the code to work as it is given in the first place. >> >> Best, >> Manfred > > ------------------------------------------------------------------------------ > EditLive Enterprise is the world's most technically advanced content > authoring tool. Experience the power of Track Changes, Inline Image > Editing and ensure content is compliant with Accessibility Checking. > http://p.sf.net/sfu/ephox-dev2dev > _______________________________________________ > X10-users mailing list > X10-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/x10-users ------------------------------------------------------------------------------ EditLive Enterprise is the world's most technically advanced content authoring tool. Experience the power of Track Changes, Inline Image Editing and ensure content is compliant with Accessibility Checking. http://p.sf.net/sfu/ephox-dev2dev _______________________________________________ X10-users mailing list X10-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/x10-users