`
litaocheng
  • 浏览: 337711 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

erlang otp 自定义behaviour

阅读更多
为什么要使用behaviour,如果您对erlang有所了解的话,就明白其中的好处。
可以做到代码通用,可以减少错误,可以使用很多成熟的久经考验的模式,可以减轻无谓的重复劳动等等。。
有些时候,你可能需要定义自己的behaviour,这可不仅仅是OTP的权力。
自己定义behaviour非常简单,仅仅需要几步。
下面是一个例子:

-module(my_behaviour).

-export([behaviour_info/1]).
behaviour_info(callbacks) ->
    [{init,1},
     {handle, 2}];
behaviour_info(_Other) ->
    undefined.

-export([start/1, stop/0]).
start(Mod) ->
    State = Mod:init(0),
    {ok, State2} = Mod:handle(add,  State),
    io:format("state :~p~n", [State2]).
stop() ->
    stop.



上面就定义了一个名叫my_behaviour的behaviour,其需要两个回调函数:init/1和handle/1,以后在使用这个behaviour时,只需要export这两个回调函数即可。
如:

-module(use_my_behaviour).
-behaviour(my_behaviour).
%%behaviour callback function
-export([init/1,  handle/2]).

init(State) ->
      io:format("init ~p~n", [State]),
      State.

handle(Request, State) ->
      io:format("handle request:~p state:~p", [Request, State]),
      State2 = State + 1,
      {ok, state2}.

使用:

$erl
> my_behaviour:start(use_my_behaviour).


为了您的behaviour更易使用,您需要对behaviour的功用和回调函数的参数,返回值等进行详细的说明。具体可以参考OTP中gen_server等behaviour的实现。
分享到:
评论
3 楼 mryufeng 2009-10-23  
# handle(Request, State) -> 
#       io:format("handle request:~p state:~p", [Request, State]), 
#       State2 = State + 1, 
#       {ok, state2}.

Typo错误应该为{ok, State2}.


2 楼 argan 2009-09-02  
./use_my_behaviour.erl:2: Warning: behaviour my_behaviour undefined

怎么能让erl编译的时候找到他呢?难道要搞到系统的路径里去?
1 楼 hittyo 2009-06-30  
behaviour_info  这个干嘛用

相关推荐

    Erlang OTP 设计原理 - 中文版

    Erlang OTP 设计原理涉及到的核心概念包括监督树、行为模式以及应用的设计和管理。Erlang/OTP 提供了一种组织代码的高级原则,它基于进程、模块和目录的层次结构来构建可靠的、可容错的分布式系统。本文档将详细介绍...

    Erlang入门:构建application练习5(监督树)

    在这个"Erlang入门:构建application练习5(监督树)"中,我们将探讨如何构建一个包含监督树的应用,这是Erlang OTP(开放电信平台)设计模式中的核心部分。 监督树是Erlang OTP设计原则的重要组成部分,它用于管理...

    Erlang中文手册.pdf

    根据提供的文件内容,以下是对Erlang/OTP R11B中文手册内容的知识点汇总。 ### Erlang/OTP R11B中文手册概述 手册是一份关于Erlang/OTP R11B版本的官方文档的中文翻译,由Dino Wu翻译,邮箱为***和***,仅供学习...

    erlang实战IP查询服务

    本项目中主要利用了OTP提供的行为(behaviour),如`gen_server`,用于简化服务端的开发。 - **gen_server行为**: - **定义**: 维护某个状态或提供某项功能的服务端行为。 - **应用场景**: 适合于需要维护状态的...

    supervisor博客代码附件

    在Erlang编程环境中,`Supervisor`是 OTP(Open Telephony Platform)设计模式中的一种,它是构建可靠、容错系统的重要组成部分。本篇博客的附件着重探讨了如何使用Erlang的`Supervisor`模块,并通过编写代码来演示...

    erlang 参考手册 模块部分--自己翻译的中文版

    通过`-behaviour(Behaviour)`,模块可以声明为特定行为的回调模块,如OTP标准行为`gen_server`、`gen_fsm`、`gen_event`和`supervisor`。 4.2.3 记录(Record)定义 使用`-record(Record, Fields)`定义记录,记录...

    erlang入门手册

    - **Behaviour**: OTP提供了一种机制,称为Behaviour,用于实现特定模式的通用代码结构。 - **发布**: OTP的应用程序可以被打包和发布,使得部署和管理变得简单。 - **Gen_Server、Gen_Fsm、Gen_Event**: OTP定义...

    Erlang中文手册

    ### Erlang中文手册知识点梳理 #### 1.1 简介 - **Erlang 简介**: Erlang 是一种通用、并发、容错性强的编程语言,特别适用于构建高可用性的分布式系统。本手册旨在为初学者提供Erlang的基础知识。 - **手册目标*...

    导演:导演是ErlangElixir过程的生产就绪主管和经理,专注于速度,性能和灵活性。

    标签中的“erlang elixir otp flexible manager supervisor behaviour”进一步强调了Director与OTP的监督者行为的紧密联系,以及它在灵活性方面的优势。“elixir-library erlang-library”表明Director可能是作为一...

    erlang_guidelines:Inaka的Erlang编码准则

    Erlang编码标准和准则 建议的阅读材料: : 目录: 荣耀干 按功能对子目录中的模块进行分组 头文件 句法 不要写意粉代码 避免动态通话 避免深层嵌套 避免如果表达式 避免嵌套尝试... 命名 命名时要保持一致 显式...

    gen_server tasting 之超简单名称服务(续)

    在IT行业中,`gen_server`是Erlang OTP(开放电信平台)框架中的一个核心组件,它提供了一种模式化的方式来实现服务器进程。本篇博客“gen_server tasting 之超简单名称服务(续)”主要探讨了如何使用gen_server来...

    GenServerOfficialSite

    GenServer是Elixir语言中的一个核心组件,它提供了一种在Erlang OTP(开放电信平台)框架下实现状态管理和服务行为的方式。GenServer的主要作用是处理并发和容错,使得构建高可用、高可靠性的分布式系统变得简单。...

    elixirdose-cli:教程使用Elixir创建命令行工具

    Python,Ruby,Erlang和Elixir在命令行上为我们提供了很棒的工具。 因此,在本文中,我们将尝试创建命令行工具。 我觉得Elixir在这方面会做得很好。 设置应用 让我们从使用mix的新项目开始。 $> mix new awesome...

    buddy_matching:使用Elixir和Phoenix构建的某种通用播放器匹配服务

    Genserver是Elixir中的一个行为(behaviour),它提供了一种在Actor模型下管理状态和处理异步调用的方法,这对于构建高效、响应式的系统至关重要。在buddy_matching服务中,Genserver可能被用来处理匹配请求、维护...

Global site tag (gtag.js) - Google Analytics