日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

命名函数

發布時間:2023/11/30 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 命名函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

函數體是代碼塊

  代碼塊do...end是一種表達式的組織方式。

# ./times.exs下
defmodule Times dodef doule(n) don
* 2end end

?

函數調用與模式匹配

  代碼如下:

# ./factorial.exs    計算階層 defmodule Factorial dodef of(0), do: 1          #終止條件要寫在上面,否則永遠都不會被執行到def of(n), do: n * of(n - 1) end

?

哨兵子句

  代碼如下:

defmodule Guard dodef what_is(x) when is_number(x) doIO.puts "#{x} is a number"enddef what_is(x) when is_list(x) doIO.puts "#{x} is a list"enddef what_is(x) when is_atom(x) doIO.puts "#{x} is an atom"end end

  它們由一個或多個when關鍵字緊接在函數定義后的斷言。當執行時,先執行基于參數的匹配,然后評估所有的when斷言。

  哨兵子句不支持||和&&

?

默認參數

  定義函數名時,可以用param \\ value 的語句給任意參數指定默認值。

# ./default_param.exs defmodule Example dodef func(p1, p2 \\ 2, p3 \\ 3, p4) doIO.inspect [p1, p2, p3, p4]end endExample.func("a", "b") #=> ["a", 2, 3, "b"] Example.func("a", "b", "c") #=> ["a", "b", 3, "c"] 從從左到右匹配 Example.func("a", "b", "c", "d")

?

  有可能會出現以下錯誤:

def func(p1, p2 \\ 2, p3 \\ 3, p4)def func(p1, p2)    #傳入兩個參數時,第二個函數永遠無法被調用,報錯def func(p1, p2 \\ 123)  #傳入兩個參數時,也是如此 def func(p1, p2)

  可以添加一個包含默認參數,且只有函數頭部分沒有函數體的函數,而其余的使用普通函數,那些默認值就會被應用到對此函數的所有調用上

#省略部分內容
def func(p1, p2 \\ 123)def func(p1, p2) when ...def func(p1, p2) ...

?

|>管道運算符

  |>將左邊表達式的結果,將其作為第一個參數傳遞給右邊的函數調用

people = DB.find_customers orders = Orders.for_customers(people) tax = sales_tax(orders, 2013) filing = prepare_filing(tax) #可以寫為 filing = DB.find_customers|> Orders.for_customers|> sales_tax(2013)|> prepare_filingval |> f( a, b ) 等價于 f( val, a, b)

?

模塊

  模塊為定義的內容提供了命名空間。它可以用來封裝命名函數,還可以封裝宏、結構體、協議和其他模塊

?

模塊指令

  其作用域以指令出現處作為起點,直到當前模塊結束

  import,將模塊內的函數或宏引入到當前作用域。比如,如果從List模塊導入flatten函數,可以直接調用它而無需指定其模塊名。完整語法為:import Module [, only: | except ]

defmodule Example dodef func1 do    #將import寫到這里 fun2也能正常使用List.flatten [1, [2, 3], 4]enddef fun2 doimport List, only: [flatten: 1]flatten [5, [6, 7], 8]end end

  alias,為模塊創建別名。目的為減少輸入

defmodule Example dodef func doalias Mix.Task.Doctest, as: Doctestdoc = Doctest.setupdoc.run(Doctest.defaults)end end

  require,reqiire指令確保在代碼使用宏之前,加載定義這些宏的模塊。

?

模塊屬性?

  每個Elixir模塊都有與之關聯的元數據。元數據的每一項稱之為模塊的屬性,并且有自己的名字。在模塊內部我們可以在其名稱前加@訪問這些屬性,可以同此語法為屬性賦值:@name value,在函數內部不能設置屬性

defmodule Example do@author "Lr"def get_author od@authorend end

  若多次為屬性賦值,在命名函數內部訪問該屬性,其值為定義函數時屬性的當前值。

?

模塊名Elixir

  在內部,模塊名僅僅是原子類型。比如,當我們寫IO時,Elixir內部將其轉化為原子類型Elixir.IO

is_atom IO #true to_string IO #"Elixir.IO" "Elixir.IO" === IO #true"Elixir.IO".puts 123 #123 :ok

?

轉載于:https://www.cnblogs.com/lr1402585172/p/11493441.html

總結

以上是生活随笔為你收集整理的命名函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。