I am writing code in which I pondered exactly using this kind of thing, it 
involves tree walking on a binary tree, but I decided to scrap this 
approach because, although you can't see it so clearly in that C code, it's 
executing a function every loop that probably doesn't need to be. your 
next() function sounds like an iterator and you could just use range 
instead, and slices. This is most likely why this use case has been 
rejected as it does not improve the expressive power of the statement.

On Thursday, 3 May 2018 11:25:34 UTC+3, rog wrote:
>
> FWIW, the thing I miss sometimes is the equivalent of C's: 
>
>      while((x = next()) != nil) { 
>          something() 
>      } 
>
> In Go you need to do either: 
>
>      for x = next(); x != nil; x = next() { 
>          something() 
>      } 
>

I dunno if that's an error but since you are in this code above working on 
a variable in the parent scope it would make more sense to combine the 
declaration and initialisation outside the for block scope, as you have 
left out a necessary var type declaration and in that case you could 
shorten that by type inference declaring it prior to the for loop. You 
would have a point if the declaration of x was in the first clause but even 
then x := next() is visibly different to x=next() and alternatively even 
you could shorten this by using indirection. For example, I would implement 
this logic thusly:

func next(x *Xtype) {}
func first() *Xtype { <create here, eg return &Xtype{1, 2, 3}> }
...

then

var x *Xtype
for x:=first(); x!=nil; next(x) { }

since after all, this next() function is semantically (human-wise) 
ambiguous and doesn't express any relation to the nature of the list it 
must refer to. Slices let you do this iteration even neater using range and 
I am wondering why you can't use slices

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to