Hi Jorge, What about making the Array::value return a &dyn ValueTrait. This new ValueTrait would have to be implemented for all the possible values that can be returned from the arrays
Fernando On Thu, 28 Jan 2021, 08:42 Jorge Cardoso Leitão, <jorgecarlei...@gmail.com> wrote: > Hi Fernando, > > I tried that some time ago, but I was unable to do so. The reason is that > Array is a trait that needs to support also being a trait object (i.e. > support `&dyn Array`). > > Let's try here: what type should `Array::value` return? One option is to > make Array a generic. But if Array is a generic, we can't support `dyn > Array` without declaring its type (e.g. `dyn Array<i32>`), which goes > against the requirement that we can use `Array` without knowing its > compile-time type. > > If we make the function `value<T>()` a generic without constraints, then > all concrete arrays (e.g. PrimitiveArray) will need to implement that, > which is not possible because e.g. `StringArray` does not know how to yield > a value of e.g. `f32`. > > I also tried a softer version recently: use ListArray<T: Array>, i.e. try > to change `ListArray` to be a generic over Array and have `values(i)` > return the concrete type. However, even that does not work because it is > impossible to tell how nested a ListArray will be until we read the data > (i.e. after the program was compiled), which means that the compiler will > be unable to compile all (potentially nested) possible variations of the > generic. > > So, overall, this exercise convinced me that what we have is already the > simplest (but no simpler) API that we can offer under the requirements we > have (But I would love to be proven wrong, as I share your concerns) > > Best, > Jorge > > > On Wed, Jan 27, 2021 at 12:27 PM Fernando Herrera < > fernando.j.herr...@gmail.com> wrote: > > > Hi, > > > > I'm wondering if it has been considered to move the value function that > is > > implemented in all the arrays (StringArray, BooleanArray, ListArray, etc) > > as part of the Array trait? > > > > This would help when extracting values from generic arrays that implement > > dyn Array without having to manually downcast the array all the time to > > read a value from the array. > > > > Thanks, > > >