zoukankan      html  css  js  c++  java
  • [erlang] Erlang继承(inheritance)

    FROM: http://www.erlang.se/euc/07/papers/1700Carlsson.pdf

    alpha.erl

     1 -module(alpha,[X,Y]).
     2 -export([a/0,b/1,c/2]).
     3 
     4 a() ->
     5     {?MODULE,a,[X,Y],[]}.
     6 
     7 b(S) ->
     8     {?MODULE,b,[X,Y],[S]}.
     9 
    10 c(S,T) ->
    11     {?MODULE,c,[X,Y],[S,T]}.

    运行结果:

    Eshell V5.8.4  (abort with ^G)
    1> c(alpha).
    {ok,alpha}
    2> A = alpha:new(x,y).
    {alpha,x,y}
    3> A:a().
    {alpha,a,[x,y],[]}
    4> A:b(1).
    {alpha,b,[x,y],[1]}
    5> A:c(1,2).
    {alpha,c,[x,y],[1,2]}
    6>

    beta.erl

     1 -module(beta,[X,Y]).
     2 -extends(alpha).
     3 
     4 -export([a/0,b/1]).
     5 
     6 a() -> 
     7     {?MODULE,?BASE_MODULE,a,[X,Y],[]}.
     8 
     9 b(S) -> 
    10     {?MODULE,?BASE_MODULE,b,[X,Y],[S]}.

    运行结果:

    Eshell V5.8.4  (abort with ^G)
    1> c(beta).
    {ok,beta}    
    2> B = beta:new(x,y).
    {beta,x,y}
    3> B:a().
    {beta,alpha,a,[x,y],[]}
    4> B:b(1).
    {beta,alpha,b,[x,y],[1]}
    5> B:c(1,2).
    {alpha,c,[x,y],[1,2]}
    6>

    gamma.erl

     1 -module(gamma,[X,Y]).
     2 -extends(beta).
     3 
     4 -export([a/0,new/1]).
     5 
     6 %% 重写构造方法
     7 new(Z) ->
     8     B = ?BASE_MODULE:new(Z,17),
     9     instance(B,Z,42).
    10 
    11 a() -> 
    12     {?MODULE,?BASE_MODULE,a,[X,Y],[]}.

    运行结果 (注1)

    Eshell V5.8.4  (abort with ^G)
    1> c(gamma).
    {ok,gamma} 
    2> G = gamma:new(z).
    {gamma,z,17}
    3> G:a()
    {gamma,beta, a, [z,42], []}
    4> G:b(1) 
    {beta,alpha, b, [z,17], [1]}
    5> G:c(1,2) 
    {alpha, c,[z,17], [1,2]}

    注1 这个本地没有跑通,可能是erlang版本问题

    PS: 只是erlang的一些语法糖,OOP对于系统语言是增加复杂度了

     

     

     

  • 相关阅读:
    蛤圈不能圈一切---逐梦蛤蛤圈
    Unix培训基础
    java培训基础
    数据库基础
    Python生成requirements.txt方法
    免费高质量代理IP
    lxml库的xpath的使用
    python自带GUI库tkinter教程,全网最全最好
    selenium博客
    Linux-Centos下selenium部署
  • 原文地址:https://www.cnblogs.com/bluefrog/p/2506468.html
Copyright © 2011-2022 走看看