[go-nuts] Re: [golang-dev] Binding receiver object to a method expression, to get a method value

2017-01-19 Thread Jordan Krage
Would a simple single method interface meet your needs?

type fooer interface {
foo() bool
}

func (a *A) foo() bool { ... } 

func bar(f fooer) {
if f.foo() {
...
}
}

func main() {
a := &A{ ... }
bar(a)
}

On Wednesday, January 18, 2017 at 8:55:07 PM UTC-6, Bryan Chan wrote:
>
> On Wednesday, 18 January 2017 16:39:03 UTC-5, rog wrote:
>>
>> On 18 January 2017 at 18:45, Bryan Chan  wrote: 
>> > But I couldn't find a way to bind a receiver to a method expression, 
>> such 
>> > that the resulting method value can be invoked at a later time. Would 
>> this 
>> > be a useful addition to the language? Or did I miss something? 
>>
>> If a is an object with the method foo, a.foo will give you a function 
>> that 
>> will invoke the method at a later time. 
>>
>> See https://golang.org/ref/spec#Method_values 
>>
>  
> I understand what method values are. My original email already contained 
> an example. What I want to do is to store away a method expression, and 
> then over time, bind that expression with different receivers to form 
> different method values, so that those method values can be passed to other 
> parts of the program and invoked later.
>
> --
> Bryan
>

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


[go-nuts] Re: [golang-dev] Binding receiver object to a method expression, to get a method value

2017-01-18 Thread minux
On Wed, Jan 18, 2017 at 9:55 PM, Bryan Chan  wrote:

> On Wednesday, 18 January 2017 16:39:03 UTC-5, rog wrote:
>>
>> On 18 January 2017 at 18:45, Bryan Chan  wrote:
>> > But I couldn't find a way to bind a receiver to a method expression,
>> such
>> > that the resulting method value can be invoked at a later time. Would
>> this
>> > be a useful addition to the language? Or did I miss something?
>>
>> If a is an object with the method foo, a.foo will give you a function
>> that
>> will invoke the method at a later time.
>>
>> See https://golang.org/ref/spec#Method_values
>>
>
> I understand what method values are. My original email already contained
> an example. What I want to do is to store away a method expression, and
> then over time, bind that expression with different receivers to form
> different method values, so that those method values can be passed to other
> parts of the program and invoked later.
>

It's possible to use reflect.MakeFunc to bind a argument to a func.
The result won't be very efficient though, so unless you really want to be
generic, you probably should create a closure for this statically (which
means you must know the exact type of the method).

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


[go-nuts] Re: [golang-dev] Binding receiver object to a method expression, to get a method value

2017-01-18 Thread Tamás Gulácsi
No, but you can create a function/closure which gets the receiver as first arg, 
and either executes the method with the given args, or returns such a function, 
as you wish.

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


[go-nuts] Re: [golang-dev] Binding receiver object to a method expression, to get a method value

2017-01-18 Thread Bryan Chan
On Wednesday, 18 January 2017 16:39:03 UTC-5, rog wrote:
>
> On 18 January 2017 at 18:45, Bryan Chan > 
> wrote: 
> > But I couldn't find a way to bind a receiver to a method expression, 
> such 
> > that the resulting method value can be invoked at a later time. Would 
> this 
> > be a useful addition to the language? Or did I miss something? 
>
> If a is an object with the method foo, a.foo will give you a function that 
> will invoke the method at a later time. 
>
> See https://golang.org/ref/spec#Method_values 
>
 
I understand what method values are. My original email already contained an 
example. What I want to do is to store away a method expression, and then 
over time, bind that expression with different receivers to form different 
method values, so that those method values can be passed to other parts of 
the program and invoked later.

--
Bryan

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


[go-nuts] Re: [golang-dev] Binding receiver object to a method expression, to get a method value

2017-01-18 Thread roger peppe
On 18 January 2017 at 18:45, Bryan Chan  wrote:
> In Go, you could pass a method value around so that the method can be
> invoked later on a pre-determined receiver, e.g.
>
> func (a *A) foo() bool { ... }
>
> func bar(f func () bool) {
> if f() {
> ...
> }
> }
>
> func main() {
> a := &A{ ... }
> bar(a.foo)
> }
>
>
> You could also create a method expression so that the receiver can be
> supplied at actual call time, e.g.
>
> f := (*A).foo
> boolVal := f(a)
>
>
> But I couldn't find a way to bind a receiver to a method expression, such
> that the resulting method value can be invoked at a later time. Would this
> be a useful addition to the language? Or did I miss something?

If a is an object with the method foo, a.foo will give you a function that
will invoke the method at a later time.

See https://golang.org/ref/spec#Method_values

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

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