0 0
Read Time:1 Minute, 0 Second

elixir 的模块属性除了可帮助我们建立模块 (module) 的说明, 函数 (function) 的说明外, 也可帮助我们定义常数。

elixir module attributes

elixir 的模块属性, 区分为:

  • @moduledoc: 代表著模块 (module) 的说明; 在下面的例子, @moduledoc说明了模块 Servy.Handler 主要负责 “Handles HTTP requests. “。
defmodule Servy.Handler do

  @moduledoc "Handles HTTP requests. "
  • @doc: 代表著函数 (function) 的说明; 在下面的例子, @doc 说明了函数 handle 主要负责 “Transforms the request into a response.”
 @doc "Transforms the request into a response."
  def handle(request) do
    request
    |> parse
    |> rewrite_path
    |> log
    |> route
    |> track
    |> format_response

  end
  • @ (定义常数): 我们可使用 @ 在模块内定义常数。在下面的例子中, 我们定义了常数 @page_path 来代表著函数 Path.expand(“../../pages”, __DIR__) 执行后的回传值; 某个的路径。
defmodule Servy.Handler do

  @moduledoc "Handles HTTP requests. "

  @page_path Path.expand("../../pages", __DIR__)

当我们定义了常数 @page_path 在模块内, 则从 @page_path 在模块内的位置之后的所有函数, 都可以使用 @page_path。在下面的例子中, @page_path 在模块 Servy.Handler 内所有的函数之前, 所以, 模块 Servy.Handler 内的所有函数, 都可以使用 @page_path。

defmodule Servy.Handler do

  @moduledoc "Handles HTTP requests. "

  @page_path Path.expand("../../pages", __DIR__)

  @doc "Transforms the request into a response."
  def handle(request) do
    request
    |> parse
    |> rewrite_path
    |> log
    |> route
    |> track
    |> format_response

  end

 def parse(request) do
def route(%{method: "GET", path: "/about"} = conv) do
     @page_path
     |> Path.join("about.html")
     |> File.read
     |> handle_file(conv)
end

About Post Author

方俊贤; Ken Fang

专利号: 201910652769.4; 一种深度学习的算法, 预测微服务持续发布、持续部署后对产品整体质量的影响, 获得国家知识财产局专利; 符合专利法实施细则第 44 条的规定。
Happy
Happy
0 %
Sad
Sad
0 %
Excited
Excited
0 %
Sleepy
Sleepy
0 %
Angry
Angry
0 %
Surprise
Surprise
0 %

Average Rating

5 Star
0%
4 Star
0%
3 Star
0%
2 Star
0%
1 Star
0%

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据