1) what do you think of multiple return values, like in the feature of "Multiple Target assignment"?
it might be easier than wrapping in pairs and tuples or a specific struct.
(I'm learning the hard way keeping to the minimal types)
an example signature would be
def next2(ints as List<of int>) as int, int
the calling side:
a, b = .next2(numbers)
I am not sure if it's a good idea or not. what do you think?
2) another question is with regard to delegates.
to define a method that takes another method, in C# I usually use the Func<,...> or Action<> as a parameter, and later call it with a lambda or a method.
It's unclear to me how to define such a signature in Cobra.
can you clear that up please? (some examples in the doc would do nicely)
thanks alot, kobi
Forums
idea: multiple return values
5 posts
• Page 1 of 1
idea: multiple return values
Falun Dafa is Good.
Truth, Compassion, Forbearance is Good.
Truth, Compassion, Forbearance is Good.
- kobi7
- Posts: 82
- Location: Israel
Re: idea: multiple return values
1) Agreed, I would like to have multiple return values as well. You don't need it very often but when you do it's nice to have.
2) You can do this with the 'sig' and 'do' keywords.
http://cobra-language.com/trac/cobra/wiki/Delegates
http://cobra-language.com/trac/cobra/wiki/AnonMethod
If it's not clear, I can point out an example in the folding code for the MD addin.
2) You can do this with the 'sig' and 'do' keywords.
http://cobra-language.com/trac/cobra/wiki/Delegates
http://cobra-language.com/trac/cobra/wiki/AnonMethod
If it's not clear, I can point out an example in the folding code for the MD addin.
- nerdzero
- Posts: 286
- Location: Chicago, IL
Re: idea: multiple return values
Seems a small amount of syntax sugar used only occasionally
(that might possibly change if it was freely available though...
another plus is that the language could then lose the out and inout modifiers on fn args and parameters)
as noted
Dual value return types you can almost do simply now
using Lists if you can handle sloppy Typing or an explicitly typed Pair on the return values
easier eventually if support a builtin literal Tuple type natively ( .Net 4?)
cf list [], dict {:} using some syntax like &[] (say ( *[] ??)
It is definitely cleaner appearing without the decl or punctuation cruft though.
(that might possibly change if it was freely available though...
another plus is that the language could then lose the out and inout modifiers on fn args and parameters)
as noted
Dual value return types you can almost do simply now
using Lists if you can handle sloppy Typing or an explicitly typed Pair on the return values
a,b = .fn(123, 'xyz')
assert a.typeOf == int
assert b.typeOf == String
def .fn(i as int, s as String) as Pair<int, String>
# lotta calc
return Pair<int, String>(i, s)
def .fn(i as int, s as String) as List<of dynamic>
# lotta calc
return [i, s]
# vs
def .fn(i as int, s as String) as int, String
# lotta calc
return i, s
easier eventually if support a builtin literal Tuple type natively ( .Net 4?)
cf list [], dict {:} using some syntax like &[] (say ( *[] ??)
def .fn(i as int, s as String) as Tuple<of int, String> # or some aliasing like (*) Stream -> as &[int, String]
# lotta calc
return &[i, s]
It is definitely cleaner appearing without the decl or punctuation cruft though.
- hopscc
- Posts: 632
- Location: New Plymouth, Taranaki, New Zealand
Re: idea: multiple return values
The idea for this has been surprisingly persistent in refusing to drop from my mind.
I opened ticket:315 as a placeholder for it.
I opened ticket:315 as a placeholder for it.
- hopscc
- Posts: 632
- Location: New Plymouth, Taranaki, New Zealand
Re: idea: multiple return values
Theres a patch for an implementation of this on the ticket.
Syntax as given earlier - comma sep types on decl, comma sep values on return stmt.
It uses/relies on a new RTL container - Bag - which is an explicitly typed element holder (of up to 4 items)
based on Pair (2 element) - or eventually perhaps a typed Tuple ( > Net 4.?),
If just the Bag was provided in the RTL, code such as
could easily implement fully typed multi-return value methods (at the price of some additional punctuation boilerplate)
which may be sufficient for most uses....
Syntax as given earlier - comma sep types on decl, comma sep values on return stmt.
It uses/relies on a new RTL container - Bag - which is an explicitly typed element holder (of up to 4 items)
based on Pair (2 element) - or eventually perhaps a typed Tuple ( > Net 4.?),
If just the Bag was provided in the RTL, code such as
a,b = .fn
assert a.typeOf == int
assert b.typeOf == String
def .fn as Bag<of int, String>
i as int
s as String
...
return Bag<of int, String>(i, s)
could easily implement fully typed multi-return value methods (at the price of some additional punctuation boilerplate)
which may be sufficient for most uses....
- hopscc
- Posts: 632
- Location: New Plymouth, Taranaki, New Zealand
5 posts
• Page 1 of 1
Who is online
Users browsing this forum: No registered users and 17 guests