• elixir 调用erlang 代码


    备注:

       项目比较简单,主要是elixir 混合erlang 代码,elixir 调用erlang 模块方法
     
    1. 初始化项目
     
    mix  new  erlangelixirdemo
    
    项目结构如下:
    
    ├── README.md
    ├── config
    │   └── config.exs
    ├── lib
    │   └── erlangelixirdemo.ex
    ├── mix.exs
    └── test
        ├── erlangelixirdemo_test.exs
        └── test_helper.exs

     
    2. 添加erlang 支持
    创建src 目录,并编写erlang code
    
    项目结果如下:
    
    ├── README.md
    ├── config
    │   └── config.exs
    ├── lib
    │   └── erlangelixirdemo.ex
    ├── mix.exs
    ├── src
    │   └── app.erl
    └── test
        ├── erlangelixirdemo_test.exs
        └── test_helper.exs
    
    src/app.erl  代码如下:
    
    -module(app).
    %%API
    -export([
    login/0,
    userlogin/0,
    login/2,
    userlogin/1
    ]).
    -record(user, { name, age }).
    login() ->
        {ok,'dalongdemo'}.
    
    login(Name , Password) ->
        {ok,'appdemo'}.
    
    userlogin()->
        #user{name='dalongdemo',age=44}.
    
    userlogin(User)->
        User.
     
    3. elixir 调用erlang 模块方法
    lib/erlangelixirdemo.ex 代码如下:
    
    defmodule Erlangelixirdemo do
      @moduledoc """
      Documentation for Erlangelixirdemo.
      """
      def call_erlang do
        IO.inspect :app.userlogin()
      end
    end
     
    4. 编译访问
     
    iex  -S mix
    Erlang/OTP 20 [erts-9.3] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]
    
    Compiling 1 file (.erl)
    Compiling 1 file (.ex)
    Generated erlangelixirdemo app
    Interactive Elixir (1.6.4) - press Ctrl+C to exit (type h() ENTER for help)
    iex(1)> E
    Elixir              Enum                Enumerable          
    ErlangError         Erlangelixirdemo    Exception           
    
    iex(1)> Erlang
    ErlangError         Erlangelixirdemo    
    iex(1)> Erlangelixirdemo.
    MixProject       call_erlang/0    
    iex(1)> Erlangelixirdemo.call_erlang
    {:user, :dalongdemo, 44}
    {:user, :dalongdemo, 44}
     
    5. 说明
     
    默认mix compile 的时候,对于erlang 代码是在src 目录进行编译的,同时可以在 mix.exs 修改
    
    def project do
        [
          app: :appdemo,
          version: "0.1.0",
          elixir: "~> 1.6",
          start_permanent: Mix.env() == :prod,
          deps: deps()
        ]
    end
    
    如下:
    
    def project do
      [app: :my_app,
       version: "0.0.1",
       elixir: "~> 1.0",
       erlc_paths: ["src"], # ADD THIS OPTION
       build_embedded: Mix.env == :prod,
       start_permanent: Mix.env == :prod,
       deps: deps]
    end
       
    6. 参考代码
    https://github.com/rongfengliang/elixir-erlang
  • 相关阅读:
    java面向对象类的继承~ 匿名类 ;多态特性;强制类型转换
    Java面向对象~类和对象&方法,类方法
    1036. Escape a Large Maze
    909. Snakes and Ladders
    559. Maximum Depth of N-ary Tree
    987. Vertical Order Traversal of a Binary Tree
    913. Cat and Mouse
    865. Smallest Subtree with all the Deepest Nodes
    882. Reachable Nodes In Subdivided Graph
    864. Shortest Path to Get All Keys
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/8808203.html
Copyright © 2020-2023  润新知