Thanks. I understand that, but is there a specific reason why doing:
takedecision{H <: Dice}(::Type{H})
is bad / not as good?
On Thursday, March 10, 2016 at 1:06:01 PM UTC-5, Jeffrey Sarnoff wrote:
>
> when you do
> immutable Dice end
> or
> type Dice end
> you create a singleton type -- there can be only one instance (or all
> instances are that identical single instance).
>
> To realize a singleton type, call it:
> myDice = Dice(); myCoin = Coin()
>
> now, you can use
> choose(x::Dice) = println("throw the dice")
> choose(myDice)
> throw the dice
>
>
> On Thursday, March 10, 2016 at 12:02:09 PM UTC-5, ben wrote:
>>
>> Hi everyone,
>>
>> One of the many cool things we can do in Julia is use multiple dispatch
>> to avoid a "method" argument followed by a "if" construct sending to
>> back-end functions. I sometimes get confused about which of the following
>> two ways of achieving this is better:
>>
>> ~~~
>> immutable Dice end
>> immutable Coin end
>>
>> takedecision{H <: Dice}(::Type{H})=println("throw a dice")
>> takedecision{H <: Coin}(::Type{H})=println("flip a coin")
>> makedecision(::Dice)=println("throw a dice")
>> makedecision(::Coin)=println("flip a coin")
>>
>> takedecision(Dice)
>> takedecision(Coin)
>> makedecision(Dice())
>> makedecision(Coin())
>> ~~~
>>
>> If the method has "tuning parameters" (like the type of Dice or of Coin),
>> the second way is much better, using inner fields `method.tuningparameter`
>> and constructor `Method(tuningparameter)`. But if the method type is a pure
>> "label" type without any additional content, both ways work. The first one
>> is uglier in the source code but nicer for the user and may be more
>> faithful to the concept (I want to make a decision by throwing a coin, not
>> by throwing this particular coin). Indeed see the confusion caused by
>> Gridded(Linear()) in this other topic:
>> https://groups.google.com/forum/#!topic/julia-users/0cV6v-FJD7c
>>
>> Am I missing something key in terms of the pros and cons of each of these
>> two ways? Is there a principled good practice?
>>
>> Best
>>
>> Ben
>>
>>