Lua程序設計 深刻函數01

          在Lua中,函數是一種「第一類值」:表示在Lua中的函數與其餘傳統類型的值(例如:數字和字符串)是同樣的,能夠存儲到變量(全局,局部都可)或table中,能夠做爲實參傳遞給其餘函數,還能夠做爲其餘函數的返回值。函數

         「詞法域」:指一個函數能夠嵌套在另外一個函數中,內部的函數能夠訪問外部函數中的變量。lua

          Lua中的函數與全部其餘值同樣都是匿名的,當討論一個函數時,其實是在討論一個持有某函數的變量。這與變量持有各類值一個道理,能夠以多種方式來操做這些變量。spa

a = {p = print}
a.p("Hello World")  --->Hello World
print = math.sin   --->print如今引用了正弦函數。
a.p(print(1))   ---->0.841470
sin = a.p       --->sin 如今引用了print函數。
sin(10,20)    ---->10   20

        Lua中的函數能夠理解成由一些表達式建立的,所以一個函數的定義實際就是一條賦值語句,這條語句建立了一種類型爲「函數」的值,並將這個值賦予一個變量。code

function foo(x)  return 2*x end  ======>  foo = function(x) return 2*x end 
能夠將表達式「function(x) <body> end」視爲一種函數的構造式,就像table的構造式{}同樣。將這種函數構造式的結果視爲一個「匿名函數」。

       可接受另外一個函數做爲實參的,稱其是一個「高階函數」。應用匿名函數來建立高階函數所需的實參則能夠帶來更大的靈活性。字符串

function derivative (f, delta)
  delta = delta or le - 4
  return  function(x)
          return (f(x + delta) - f(x)) / delta
         end
 end        對於特定的函數f調用derivative(f)將返回其導數。
相關文章
相關標籤/搜索