Mentakrifkan dan Memanggil Fungsi
Pelajari sintaks pengisytiharan fungsi, kaedah pemanggilan serta fungsi setempat berbanding fungsi global.
Mentakrifkan dan Memanggil Fungsi ialah pelajaran Lua Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Lua Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Lua Academy merangkumi sejumlah 4 pelajaran.
Sintaks Fungsi
Fungsi dalam Lua ditakrifkan dengan kata kunci function. Bahagian badan ialah blok yang ditamatkan oleh end. Fungsi boleh bersifat global atau setempat. Anda memanggil fungsi dengan menambahkan tanda kurung yang mengandungi argumen. Jika anda tidak memberikan argumen, parameter yang tiada nilainya menerima nil.
function sayHello(name)
print("Hello, " .. (name or "World") .. "!")
end
sayHello("Lua") -- Hello, Lua!
sayHello() -- Hello, World!
local function add(a, b)
return a + b
end
print(add(3, 4)) -- 7Nilai Pulangan
Fungsi mengembalikan nilai dengan return. Tidak seperti kebanyakan bahasa, fungsi Lua boleh mengembalikan berbilang nilai. Jika anda tidak mengembalikan nilai secara jelas, fungsi tidak mengembalikan apa-apa (sifar nilai). Nilai pulangan berlebihan dibuang apabila panggilan bukan ungkapan terakhir dalam senarai.
local function minMax(t)
local lo, hi = t[1], t[1]
for i = 2, #t do
if t[i] < lo then lo = t[i] end
if t[i] > hi then hi = t[i] end
end
return lo, hi
end
local lo, hi = minMax({5,2,8,1,9})
print(lo, hi) -- 1 9Fungsi sebagai Nilai
Fungsi ialah nilai kelas pertama dalam Lua. Anda boleh menyimpannya dalam pemboleh ubah, menghantarnya sebagai argumen kepada fungsi lain dan mengembalikannya. Hal ini membolehkan panggilan balik, fungsi aras lebih tinggi dan corak pengaturcaraan berfungsi.
local ops = {
add = function(a, b) return a + b end,
sub = function(a, b) return a - b end,
mul = function(a, b) return a * b end,
}
local function apply(op, a, b)
return op(a, b)
end
print(apply(ops.add, 10, 3)) -- 13
print(apply(ops.mul, 4, 5)) -- 20Fungsi Setempat berbanding Global
Gunakan local function untuk fungsi pembantu yang hanya digunakan dalam modul. Fungsi global mencemarkan ruang nama global dan boleh dicapai dari mana-mana sahaja, yang mungkin menyebabkan konflik nama. Dalam kebanyakan kes, utamakan fungsi setempat dan dedahkan hanya perkara yang diperlukan melalui jadual modul.
-- Bad: pollutes global namespace
function helper() end
-- Good: module-local
local function helper()
return "I am local"
end
-- Module export pattern
local M = {}
function M.publicFunc()
return helper() -- can call local
end
return MKaedah dengan Sintaks Titik Bertindih
Lua menyediakan kemudahan sintaks untuk mentakrifkan dan memanggil kaedah pada jadual. obj:method(arg) setara dengan obj.method(obj, arg). Bentuk titik bertindih menghantar jadual secara tersirat sebagai argumen pertama, yang lazimnya dinamakan self.
local Dog = {}
Dog.__index = Dog
function Dog.new(name)
return setmetatable({name=name}, Dog)
end
function Dog:speak()
print(self.name .. " says: Woof!")
end
local d = Dog.new("Rex")
d:speak() -- Rex says: Woof!Corak Parameter Pilihan
Lua tidak mempunyai parameter pilihan terbina dalam, tetapi anda boleh mensimulasikannya dengan pemeriksaan nil. Hantar satu jadual pilihan untuk fungsi yang mempunyai banyak parameter pilihan — cara ini lebih kemas daripada senarai argumen yang panjang.
local function createUser(name, opts)
opts = opts or {}
return {
name = name,
role = opts.role or "user",
active = opts.active ~= false,
score = opts.score or 0,
}
end
local u = createUser("Alice", {role="admin", score=100})
print(u.name, u.role, u.score)Panggilan Ekor
Panggilan ekor ialah panggilan fungsi pada kedudukan ekor (tindakan terakhir sebelum mengembalikan nilai). Lua melakukan pengoptimuman panggilan ekor: panggilan ekor yang betul tidak menggunakan ruang tindanan tambahan. Hal ini membolehkan rekursi yang mendalam tanpa limpahan tindanan apabila panggilan rekursif berada pada kedudukan ekor.
local function factorial(n, acc)
acc = acc or 1
if n <= 1 then return acc end
return factorial(n - 1, n * acc) -- tail call!
end
print(factorial(10)) -- 3628800
-- Can handle very large n without stack overflowFungsi yang Dipanggil Serta-merta
Anda boleh mentakrifkan dan memanggil fungsi dengan serta-merta: (function() ... end)(). Hal ini berguna untuk mencipta skop setempat, melaksanakan kod persediaan tepat sekali atau mengelakkan pencemaran skop luar dengan pemboleh ubah sementara.
local result = (function()
local temp = 100
local adjusted = temp * 1.5
return math.floor(adjusted)
end)()
print(result) -- 150
-- temp and adjusted not visible hereMenyimpan Fungsi dalam Jadual
Menyimpan fungsi dalam jadual ialah reka bentuk modul Lua yang lazim. Jadual itu bertindak sebagai ruang nama. Anda mentakrifkan fungsi dengan memberikannya kepada medan jadual atau menggunakan tatatanda titik/titik bertindih bersama nama jadual.
local math2 = {}
function math2.clamp(val, lo, hi)
return math.max(lo, math.min(hi, val))
end
function math2.lerp(a, b, t)
return a + (b - a) * t
end
print(math2.clamp(150, 0, 100)) -- 100
print(math2.lerp(0, 10, 0.5)) -- 5.0Penutupan sebagai Panggilan Balik
Fungsi aras lebih tinggi menerima panggilan balik. Dalam Lua, panggilan balik hanyalah nilai fungsi. Penutupan amat berguna sebagai panggilan balik kerana penutupan menangkap konteks panggilan tanpa perlu menghantar argumen tambahan melalui fungsi aras lebih tinggi.
local function forEach(t, fn)
for i, v in ipairs(t) do
fn(v, i)
end
end
local sum = 0
forEach({10, 20, 30}, function(v)
sum = sum + v
end)
print(sum) -- 60
forEach({"a","b","c"}, function(v, i)
print(i, v)
end)Semakan Pantas
Apakah output bagi: local function f() return 1, 2, 3 end; local a, b = f()?
Ulang Kaji: Fungsi
Perkara penting:
- Gunakan
local functionuntuk mengelakkan pencemaran pemboleh ubah global - Fungsi ialah nilai kelas pertama: simpan dalam pemboleh ubah, jadual, dan hantarkannya sebagai argumen
- Sintaks titik bertindih menghantar
selfsecara tersirat - Simulasikan parameter pilihan dengan
opts or {} - Panggilan ekor mengelakkan limpahan tindanan dalam rekursi mendalam
- Fungsi yang dipanggil serta-merta menghasilkan skop yang terpencil
Pelajari Lua dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 40
- Pelajaran
- 159
Soalan Lazim
Adakah pelajaran “Mentakrifkan dan Memanggil Fungsi” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Lua Academy, termasuk “Mentakrifkan dan Memanggil Fungsi”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Lua Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Mentakrifkan dan Memanggil Fungsi”?
Pelajari sintaks pengisytiharan fungsi, kaedah pemanggilan serta fungsi setempat berbanding fungsi global. Anda berlatih Lua Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Lua Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Lua Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.
Berapa lamakah pelajaran “Mentakrifkan dan Memanggil Fungsi” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Lua Academy ini?
Ya. Setiap pelajaran Lua Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Mentakrifkan dan Memanggil Fungsi
- Nilai Pulangan Berbilang
- Varargs dan Operator ...
- Rekursi dalam Lua