Indexing access for Lists and Maps considered harmful?
    Bruce Chapman 
    brucechapman at paradise.net.nz
       
    Wed Jun 24 02:15:22 PDT 2009
    
    
  
Ted Neward wrote:
> In your implementation, indexSet *must* return ValueType, and it must return
> the value passed in, if the existing semantics for Java are going to be
> preserved. Am I missing something here? If, as I think Neal already pointed
> out, we look at the expression
>
> a = b = c;
>
> The results of the intermediate expression "b = c" is "c", and therefore the
> results of the expression "a = (b = c)" is "c" as well. What are we arguing
> about? This is established Java language semantics, isn't it?
>
>   
JLS 15.26 says
" The type of the assignment expression is the type of the variable 
after capture conversion "
and
"At run time, the result of the assignment expression is the value of 
the variable after the assignment has occurred."
To fully retain these semantics I think there should be a set/put for 
the first (right hand) assignment, then a get of that value (with same 
index) (unless it can be proven that the get will return the set/put 
argument) followed by the second set/put using the result of the get.
This then  nicely REQUIRES any return value from the set/put to be ignored!!
Note that given
    List<Integer> list;
then the type of the expression
   
    list[0] = 5
should have type Integer, not int.
Where the value of an assignment expression is used, a separate get 
invocation nicely does the right thing.
Bruce
> Ted Neward | Principal Consultant, ThoughtWorks
> Java, .NET, XML Services
> Consulting, Teaching, Speaking, Writing
> http://www.thoughtworks.com | http://www.tedneward.com
>
>   
    
    
More information about the coin-dev
mailing list