Note for Julia Taiwan Meetup #10


OOP and design patterns in Julia - 杜岳華

  • 對 Julia OOP system 和 multiple dispatch 的理解程度
  • Composite over inheritance
  • Decouple the behavior and state
    • 先不管 behavior,而是先管 datatype
    • Method 不屬於某個 datatype
    • Julia 的 OOP 比較著重在 behavior (function) 的部份
      • 例如以往我們可能得針對信用卡和悠遊卡分別撰寫其儲值這個動作的 function,然後要使用的時候便以 悠遊卡.儲值()信用卡.儲值() 的方式使用,這種方式又被稱為 single dispatch。
      • 但 Julia 則是以撰寫儲值這個 behavior 為主,使用時會變成,儲值.悠遊卡()儲值.信用卡() 的方式使用,這種方式不同於以往習慣的 single dispatch,而是 multiple dispatch。
  • 如何用 multiple dispatch 寫猜拳遊戲?
abstract type Shape end  

struct Rock <: Shane end  
struct Paper <: Shane end  
struct Scissors <: Shane end  

play(::Type{Paper}, ::Type{Rock}) = 1  
play(::Type{Scissors}, ::Type{Papper}) = 1  
play(::Type{Rock}, ::Type{Scissors}) = 1  

play(::Type{T}, ::Type{T}) where {T <: Shape} = 0  

play(a:Type{<:Shape}, b::Type{<:Shape}) = - play(b, a)  




如果覺得這篇文章對你有幫助, 除了留言讓我知道外, 或許也可以考慮請我喝杯咖啡, 不論金額多寡我都會非常感激且能鼓勵我繼續寫出對你有幫助的文章。

If this blog post happens to be helpful to you, besides of leaving a reply, you may consider buy me a cup of coffee to support me. It would help me write more articles helpful to you in the future and I would really appreciate it.