I think there is no really big reason to make a special tuple type for 
return values. The extra burden comes in specifying the type and wrapping 
the list in curly brackets, and predefining the elements in a type struct 
declaration. I am writing a dense binary tree implementation (dense as in 
not sparse like all previously invented BST's) and I have defined a 
'cursor' structure which very conveniently can be used as both parameter 
and return value, and has made my code 1000x more readable and 
maintainable. Here is some snippets from this code:

type Cursor struct {
Index Index
Row   Row
Err   error
}

An example where I am just passing things through:

func (b *Bast) Parent(c Cursor) Cursor {
if c.Index == 0 {
c.Err = errors.New("No parent from the root")
return c
}
c.Row--
c.Index = c.Index>>1 - (c.Index+1)%2
c.Err = nil
return c
}

And here is an example where I named the variable in the function so it 
creates a new instance that I can work on separately to the input value:

func (b *Bast) Find(d Data) (c Cursor) {
for notfound := true; notfound && c.Err == nil; {
if b.Store[c.Index] == d {
return c
}
if b.IsLeft(d, c) {
c = b.LeftChild(c)
} else {
c = b.RightChild(c)
}
if c.IsOutside(b) || b.Store[c.Index].IsEmpty() {
c.Err = errors.New("Did not find data in tree")
}
}
return c
}

On Saturday, 21 November 2009 03:23:43 UTC+2, ziyu_huang wrote:
>
> I like multiple return, when language support it, tuple is meaningless 
> to me. 
> Why add complex syntax when there already have simple one ? 
> A simple struct can do the same thing if you insist to .. 
>
> type ATuple { 
>    rv1 int; 
>    rv2 int; 
>    rv3 string; 
> } 
>
> func tuple_return_func() { 
>    a, b int; 
>    ... 
>     return  ATuple { a, b, "some string"}; 
> } 
>
> ret := tuple_return_func(); 
>
>
>
> On 11月21日, 上午12時47分, Ben Tilly <bti...@gmail.com> wrote: 
> > On Fri, Nov 20, 2009 at 7:36 AM, Joseph Stewart<joseph.stew...@gmail.com> 
> wrote: 
> > 
> > [...] 
> > 
> > > Being a Lua user, I've grown accustom to multiple return values... I'd 
> > > respectfully like this feature to remain. 
> > 
> > Ruby demonstrates that there is no contradiction.  If you add in the 
> > ability to flatten a tuple, or decide when to gather several things 
> > into a tuple, then the two features co-exist perfectly 
> > 
> > Inventing some syntax: 
> > 
> >   // explicit declaration 
> >   type SomeTuple [string, int] tuple; 
> > 
> >   // Interaction with multiple returns 
> >   myTuple := [ function_returning_multiple_values() ]; 
> >   this, that := @myTuple; 
> > 
> > Cheers, 
> > Ben 
>

-- 
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