Yes... so every specific animal type implements it's own Output() method,
which does the trivial IsA() part, and calls Animal's Output() for the
common complicated parts...

On Nov 23, 2016 16:35, "Tong Sun" <suntong...@gmail.com> wrote:

> Have you noticed the IsA() func call there?
>
> On Wed, Nov 23, 2016 at 4:05 AM, Nick Patavalis <nick.patava...@gmail.com>
> wrote:
>
>> Hi,
>>
>> In your *second* example, making Output() a method of Animal will work,
>> since it uses only the members (fields) of Animal, and not the fields of
>> specific animals (or any behavior that varies between animals). That's why
>> I'm insisting on *real* and *specific* examples, not synthetic ones.
>>
>> /npat
>>
>> On Wednesday, November 23, 2016 at 6:08:00 AM UTC+2, Tong Sun wrote:
>>>
>>> No Nick, making Output() a member method won't work.
>>> See my OP and Jesse's answer. I.e., I have to change it from a member
>>> function to a pure function.
>>>
>>> On Tue, Nov 22, 2016 at 6:25 PM, Nick Patavalis <nick.pa...@gmail.com>
>>> wrote:
>>>
>>>> Hi,
>>>>
>>>> There is no direct mapping of what you can do with virtual functions in
>>>> other OO languages, and Go. There are different compromises you have to
>>>> make; because of this, synthetic examples will probably not help much.
>>>>
>>>> That being said, in the case of your last example I would make Output()
>>>> a method of Animal.
>>>> The Speak() methods of the specific animals would then call Output().
>>>>
>>>> /npat
>>>>
>>>> On Wednesday, November 23, 2016 at 12:03:54 AM UTC+2, Tong Sun wrote:
>>>>>
>>>>>
>>>>>
>>>>> On Tue, Nov 22, 2016 at 4:29 PM, Jesse McNelis wrote:
>>>>>
>>>>>> On Wed, Nov 23, 2016 at 8:16 AM, Tong Sun wrote:
>>>>>> > Hi,
>>>>>> >
>>>>>> > How to architect the OO's virtual function in Go?
>>>>>> >
>>>>>> > Please take a look at this (not working) Go program
>>>>>> > https://play.golang.org/p/qrBX6ScABp
>>>>>> >
>>>>>> > Please think of the "func Output()" as a very complicated function
>>>>>> that I
>>>>>> > only want to define once at the base level, not to duplicate into
>>>>>> each sub
>>>>>> > classes.
>>>>>> >
>>>>>> > How can I make it works so that the last output statement, instead
>>>>>> of being,
>>>>>> >
>>>>>> > fmt.Printf("[%v] %s: [%0.2f]\n", k, v.Name(), v.Area())
>>>>>> >
>>>>>> >
>>>>>> > will be this instead:
>>>>>> >
>>>>>> > fmt.Printf("[%v] %s\n", k, v.Output())
>>>>>> >
>>>>>>
>>>>>> You define a function:
>>>>>>
>>>>>> func Output(s Shape) string {
>>>>>>    return s.Name() + "'s area size is " + s.Area()
>>>>>> }
>>>>>>
>>>>>> Go uses interfaces for polymorphism.
>>>>>> Other OOP languages can use inheritance for polymorphism too, but Go
>>>>>> doesn't have inheritance.
>>>>>>
>>>>>
>>>>> Thanks Jesse. That works.
>>>>>
>>>>> However I just realized that it is only part of my problem.
>>>>>
>>>>> I have a huge list of common variables that I defined in my "base
>>>>> class", changing it from a member function to a pure function causes 
>>>>> almost
>>>>> every single variable now undefined.
>>>>>
>>>>> I can demonstrate the problem with this code
>>>>> https://play.golang.org/p/QjCtD9rGpa
>>>>>
>>>>> So, once again, thinking in OO, I'll define all of the common
>>>>> variables in base class, and common functionalities in virtual functions.
>>>>> How to make that idea work in Go?
>>>>>
>>>>> For the above specific code, how to easily make "func Output" works?
>>>>>
>>>>> Thanks
>>>>>
>>>>> --
>>>> You received this message because you are subscribed to a topic in the
>>>> Google Groups "golang-nuts" group.
>>>> To unsubscribe from this topic, visit https://groups.google.com/d/to
>>>> pic/golang-nuts/f_62HEOIBV4/unsubscribe.
>>>> To unsubscribe from this group and all its topics, send an email to
>>>> golang-nuts...@googlegroups.com.
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "golang-nuts" group.
>> To unsubscribe from this topic, visit https://groups.google.com/d/to
>> pic/golang-nuts/f_62HEOIBV4/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to
>> golang-nuts+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.

Reply via email to