Nesneleri Birleştirme
Coddy'nin Lua Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 28 / 70.
Lua’daki .. operatörü dizeleri birleştirir, ancak bir nesneyi bir dizeyle birleştirmek isterseniz ne olur? __concat metametodu, bunun tam olarak nasıl çalışması gerektiğini tanımlamanızı sağlar.
Lua, a .. b ile karşılaştığında ve işlenenlerden birinde __concat metametodu bulunduğunda, bu işlevi her iki değerle çağırır. Bu, nesnelerin dize ifadelerine doğal bir şekilde uyum sağlamasını istediğinizde kullanışlıdır.
local Name = {}
Name.__index = Name
function Name:new(first, last)
local obj = {first = first, last = last}
setmetatable(obj, Name)
return obj
end
function Name.__concat(a, b)
if type(a) == "string" then
return a .. b.first .. " " .. b.last
else
return a.first .. " " .. a.last .. b
end
endFonksiyonun hangi işlenenin dize olduğunu kontrol ettiğine dikkat edin. .., "Hello " .. obj veya obj .. "!" olarak kullanılabildiğinden, metamethod’unuz her iki durumu da ele almalıdır.
local person = Name:new("Ada", "Lovelace")
print("Dr. " .. person) -- Çıktı: Dr. Ada Lovelace
print(person .. " PhD") -- Çıktı: Ada Lovelace PhDDiğer operatör metamethod’ları gibi, __concat nokta sözdizimini kullanır ve her iki işleneni de bağımsız değişken olarak alır. Aritmetik metamethod’lardan temel farkı, genellikle farklı türlerle çalışmanızdır: nesneniz ve bir dize.
Görev
KolayTitle sınıfını, .. operatörünü kullanarak dize ifadelerine doğal bir şekilde dahil olabilecek biçimde oluşturalım. Bu, nesneleri dizelerle okunabilir ve sezgisel bir şekilde birleştirmek istediğinizde; örneğin bir kişinin unvanına saygı ifadeleri veya son ekler eklerken kullanışlıdır.
Kodunuzu iki dosya arasında düzenleyeceksiniz:
Title.lua:textalanı aracılığıyla unvan dizesini depolayan Title sınıfınızı tanımlayın. Bir:new(text)oluşturucusu ekleyin ve__concatmetamethod'unu uygulayın. Metamethod'unuz her iki durumu da ele almalıdır: dize nesneden önce geldiğinde ("prefix" .. obj) ve dize nesneden sonra geldiğinde (obj .. "suffix"). Sonuç, dizeyi unvanın metniyle uygun şekilde birleştirmelidir.main.lua: Title modülünüzü Require edin, bir unvan örneği oluşturun ve her iki yöndeki birleştirmeyi gösterin.
Üç girdi alacaksınız:
- Unvan metni (ör. "Engineer")
- Unvandan önce yerleştirilecek ön ek dizesi (ör. "Senior ")
- Unvandan sonra yerleştirilecek son ek dizesi (ör. " III")
Ana dosyanızda, verilen metinle bir Title oluşturun. Ardından iki birleştirme işlemi gerçekleştirin ve her sonucu ayrı bir satıra yazdırın:
- Ön ek dizesini unvan nesnesiyle birleştirin
- Unvan nesnesini son ek dizesiyle birleştirin
Örneğin girdiler Engineer, Senior ve III ise çıktı şu şekilde olmalıdır:
Senior Engineer
Engineer IIIİlk satır, ön ekin unvanla birleştirildiğini; ikinci satır ise unvanın son ekle birleştirildiğini gösterir. __concat metamethod'unuz bu doğal dize birleştirmesini mümkün kılar!
Kendin dene
-- Girdileri oku
local titleText = io.read()
local prefix = io.read()
local suffix = io.read()
-- Title modülünü yükle
local Title = require('Title')
-- TODO: Verilen titleText ile bir Title örneği oluştur
-- TODO: prefix'i title nesnesiyle birleştir ve sonucu yazdır
-- TODO: title nesnesini suffix ile birleştir ve sonucu yazdır
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1'Self' Kavramı
Fonksiyonlu TablolarAçık 'self'İki Nokta SözdizimiNokta vs İki NoktaÖzet - Hareket Eden Nokta4Proje: Dijital Banka
Proje KurulumuPara Yatırma Metodu7Çok Biçimlilik ve Geçersiz Kılma
Metotları Geçersiz KılmaÜst Sınıf Metotlarını ÇağırmaDuck TypingOrtak ArayüzTür KontrolüÖzet - Çalışan Rolleri2Sınıf Prototip Kalıbı
Prototip Kavramı__index ile Bağlama:new() KurucusuÖznitelikleri BaşlatmaBağımsız ÖrneklerÖzet - Araba Fabrikası5OOP'de Operatör Aşırı Yükleme
Nesneleri ToplamaNesneleri ÇıkarmaNesneleri BirleştirmeNesneleri Karşılaştırma (<, >)Özet - Cüzdan Matematiği8Kapsülleme
Adlandırma KurallarıGizlilik için Closure'larClosure'lar Aracılığıyla ErişimSalt Okunur TablolarDoğrulama MantığıÖzet - Güvenli Kasa11Tasarım Kalıpları (Lite)
Fabrika FonksiyonlarıSingleton TablosuIterator KalıbıObserver (Dinleyici)Özet - Logger Fabrikası3Nesne Durumu ve Davranışı
Örnek DeğişkenleriGetter MetotlarıSetter MetotlarıHesaplanmış ÖzelliklerString BiçimlendirmeEşitlik KontrolleriÖzet - Öğrenci Notu6Kalıtımın Temelleri
Kalıtım KurulumuMetot KalıtımıConstructor'ı GenişletmeAlt Sınıf Metotları EklemePaylaşılan ve BenzersizÖzet - Şekil HiyerarşisiKendi başına pratik yap: Online Lua derleyicisi