0Pricing
Lua Academy · Ders

Değişken Sayıda Bağımsız Değer ve ... Operatörü

Değişken uzunluktaki bağımsız değer listelerini ... ve select() kullanarak yönetin.

Değişken Sayıda Bağımsız Değer ve ... Operatörü, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Lua Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Lua Academy kursu toplamda 4 dersten oluşur.

Değişken Sayıda Bağımsız Değişken

Bir Lua fonksiyonu, parametre listesinde ... (üç nokta) kullanarak değişken sayıda bağımsız değişken kabul edebilir. Fonksiyonun içinde ..., fazladan bağımsız değişkenleri temsil eder. Bunu ifadelerde kullanabilir, başka fonksiyonlara aktarabilir veya bir tabloya dönüştürebilirsiniz.

local function sum(...)
  local total = 0
  for _, v in ipairs({...}) do
    total = total + v
  end
  return total
end

print(sum(1, 2, 3))        -- 6
print(sum(10, 20, 30, 40)) -- 100

Değişken Sayıdaki Bağımsız Değişkenler için select()

select(n, ...), n konumundan sonraki bağımsız değişkenleri döndürür. select("#", ...), nil değerleri de dahil olmak üzere toplam bağımsız değişken sayısını döndürür. Bu, ilk nil boşluğunda duran #{...} ifadesinden daha güvenlidir.

local function inspect(...)
  local n = select("#", ...)
  print("count:", n)
  for i = 1, n do
    print(i, select(i, ...))
  end
end

inspect("a", "b", nil, "d")
-- count: 4
-- 1  a
-- 2  b
-- 3  nil
-- 4  d

... Değerini Başka Bir Fonksiyona Aktarma

Değişken sayıdaki bağımsız değişkenleri f(...) ile doğrudan başka bir fonksiyona iletebilirsiniz. Bir çağrıda ... son bağımsız değişken olarak göründüğünde, tüm değişken sayıdaki bağımsız değişkenler aktarılır. Bu, fonksiyonları sarmalamak veya günlük kaydı tutmak için kullanışlıdır.

local function log(level, ...)
  io.write("[" .. level .. "] ")
  print(...)
end

log("INFO", "Server started on port", 8080)
log("ERROR", "File not found:", "config.lua")
-- [INFO] Server started on port  8080
-- [ERROR] File not found:  config.lua

table.pack ve table.unpack

Değişken sayıdaki bağımsız değişkenleri, sayıyı n alanında da saklayan table.pack(...) ile bir tabloya dönüştürün. Bir tabloyu table.unpack(t, i, j) ile yeniden değişken sayıda bağımsız argümana dönüştürün. Bu iki fonksiyon birlikte, değişken sayıdaki bağımsız değişken listeleri üzerinde tam denetim sağlar.

local function pack_and_show(...)
  local packed = table.pack(...)
  print("n =", packed.n)
  for i = 1, packed.n do
    print(i, packed[i])
  end
end

pack_and_show(10, nil, 30)
-- n = 3
-- 1  10
-- 2  nil
-- 3  30

Sabit ve Değişken Bağımsız Değişkenleri Birlikte Kullanma

Bir fonksiyonda hem sabit hem de değişken parametreler bulunabilir. Sabit parametreler önce gelir; ... geri kalanları yakalar. Sabit parametrelere atama yapılır, ardından geri kalanlar ... içine gider.

local function printf(fmt, ...)
  io.write(string.format(fmt, ...))
end

printf("Hello, %s! You are %d years old.\n", "Alice", 30)
printf("Pi is approximately %.4f\n", math.pi)

local function firstAndRest(first, ...)
  print("first:", first)
  print("rest count:", select("#", ...))
end
firstAndRest(1, 2, 3, 4)

Tablo Oluşturucusunda Değişken Sayıda Bağımsız Değişken

Değişken sayıdaki bağımsız değişkenleri doğrudan bir tablo oluşturucusuna yayabilirsiniz: {...}. Son öğe olarak kullanıldığında tüm bağımsız değişkenler dahil edilir. Ancak nil boşlukları # operatörünü yanıltabilir — kesin sayıya ihtiyaç duyduğunuzda table.pack kullanmayı tercih edin.

local function toArray(...)
  return {...}  -- collect all args as array
end

local arr = toArray("x", "y", "z")
for i, v in ipairs(arr) do
  print(i, v)
end
-- 1  x
-- 2  y
-- 3  z

Değişken Sayıda Bağımsız Değişken İfadeleri

... herhangi bir ifade konumunda görünebilir. Birden çoklu atamada tüm değerlerine açılır. Aritmetik bir ifadede yalnızca ilk değer kullanılır. Bu davranışı anlamak, ... ile diğer ifadeleri bir arada kullanırken oluşabilecek ince hataları önler.

local function first(...)
  local x = ...
  return x
end

print(first(10, 20, 30))  -- 10  (only first)

local function addFirst(n, ...)
  local x = ...
  return n + x
end
print(addFirst(5, 3, 99)) -- 8  (3 is first ...)

print() Değişken Sayıda Bağımsız Değişken Kullanır

Lua'nın yerleşik print() fonksiyonu da değişken sayıda bağımsız değişken alan bir fonksiyondur. Herhangi bir sayıda bağımsız değişken kabul eder, her birini bir dizgeye dönüştürür ve aralarına sekme koyar. Bunu anlamak, benzer yardımcı fonksiyonlar yazmanıza yardımcı olur.

-- print is vararg
print(1, 2, 3)           -- 1  2  3
print("a", nil, "b")     -- a  nil  b
print()                  -- (empty line)

-- Reimplementing a simple print-like function
local function myprint(...)
  local parts = {}
  for i = 1, select("#", ...) do
    parts[i] = tostring(select(i, ...))
  end
  io.write(table.concat(parts, "\t") .. "\n")
end
myprint(10, nil, 30)

pcall ile İletme

Genel amaçlı güvenli çağrı sarmalayıcısı oluşturmak için pcall ile değişken sayıdaki bağımsız değişkenleri birleştirin. Sarmalayıcı bir fonksiyonu ve istenen sayıda bağımsız değişkeni kabul eder, fonksiyonu pcall aracılığıyla çağırır ve sonuçları veya bir hatayı döndürür.

local function safeCall(fn, ...)
  local ok, result = pcall(fn, ...)
  if ok then
    return result
  else
    print("Error:", result)
    return nil
  end
end

local function divide(a, b)
  assert(b ~= 0, "division by zero")
  return a / b
end

print(safeCall(divide, 10, 2))   -- 5.0
print(safeCall(divide, 10, 0))  -- Error: ...

Değişken Sayıda Bağımsız Değişkenleri Biriktirme Kalıbı

Yaygın bir değişken sayıda bağımsız değişken kalıbı, tüm bağımsız değişkenler üzerinde yineleme yaparak bir sonuç biriktirmektir. Bu işlem yerel bir tabloyla veya select kullanılarak doğrudan toplama yoluyla yapılabilir. Her iki yaklaşım da geçerlidir; çok sayıda bağımsız değişken için tablo yaklaşımı daha temizdir.

local function average(...)
  local n = select("#", ...)
  if n == 0 then return 0 end
  local total = 0
  for i = 1, n do
    total = total + select(i, ...)
  end
  return total / n
end

print(average(10, 20, 30, 40))  -- 25.0
print(average(5))               -- 5.0

Kısa Kontrol

select("#", 1, nil, 3) ne döndürür?

Özet: Değişken Sayıda Bağımsız Değişkenler

Özet:

  • function f(...) — değişken sayıda bağımsız değişken kabul eder
  • select("#", ...) — nil değerleri de içeren güvenli sayım
  • select(n, ...) — n konumundan sonraki değerler
  • table.pack(...) — değişken sayıdaki bağımsız değişkenleri .n sayımıyla tabloya dönüştürür
  • table.unpack(t) — tabloyu değişken sayıda bağımsız argümana dönüştürür
  • Son konumdaki ... tamamen açılır; orta konumda tek bir değer verir

Sıkça Sorulan Sorular

“Değişken Sayıda Bağımsız Değer ve ... Operatörü” dersi ücretsiz mi?

Evet — “Değişken Sayıda Bağımsız Değer ve ... Operatörü” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Lua Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Lua Academy kursu toplamda 4 dersten oluşur.

“Değişken Sayıda Bağımsız Değer ve ... Operatörü” dersinde ne öğreneceğim?

Değişken uzunluktaki bağımsız değer listelerini ... ve select() kullanarak yönetin. Lua Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Lua Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Lua Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Değişken Sayıda Bağımsız Değer ve ... Operatörü” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Lua Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Lua Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. İşlev Tanımlama ve Çağırma
  2. Birden Çok Dönüş Değeri
  3. Değişken Sayıda Bağımsız Değer ve ... Operatörü
  4. Lua'da Özyineleme
← Lua Academy Sayfasına Dön