Lua syntax error: beklenmeyen sembol yakınında, 'end' bekleniyor (FiveM)
FiveM resource'u Lua syntax hatası ile başarısız mı? 'unexpected symbol near', 'end expected' ve 'unfinished string' ne anlama geliyor, satırı nasıl bulacak ve kodunuzu lint yapacak.
Resource yüklenir ve dosyalarından biri ayrıştırılamaz, konsol şu gibi bir şey yazdırır:
Error parsing script @my_script/server/main.lua in resource my_script: @my_script/server/main.lua:48: unexpected symbol near '<'Bu bir söz dizimi hatası: dosya geçerli Lua değil, bu yüzden içindeki hiçbir şey çalışmaz. Bu, kod çalışırken olacak attempt to call a nil value gibi bir runtime hatasından farklıdır. Yaygın mesajların anlamı ve satırı nasıl bulacak.
Mesajı okuyun
Her söz dizimi hatasının aynı bölümleri vardır:
@my_script/server/main.lua:48: unexpected symbol near '<'@my_script/server/main.luakaynağın içindeki dosyadır.48ayrıştırıcının vazgeçtiği satırdır. Gerçek hata genellikle o satırda veya üstündeki satırda.near '<'ayrıştırıcı başarısız olduğunda okudu token. Dosyada arayın.
Konsol hatalarını okumak için genel yolu görmek, FiveM script hatasını nasıl okuyacak bakın.
beklenmeyen sembol yakınında
Ayrıştırıcı, bir ifadeyi başlatamayan veya devam edemediği bir şey buldu. Olağan nedenler:
- Dosya Lua değil.
near '<'söylerse, örneğin bir kod barındırma web sitesinden HTML sayfası kaydedilmiş olabilirsiniz. Dosyayı açın ve ilk satırlarını kontrol edin. - Merge conflict markers
<<<<<<<ve>>>>>>>gibi iki sürümü birleştirdikten sonra kalması. - Bir saç telinden karakter sohbetten veya web sayfasından kod kopyalamak: kavisli tırnak, garip boşluk, leftover parantez.
- Başka bir dilden kod, örneğin
!=yerine~=, veya&&yerineand.
-- wrong
if price != 0 then end
-- right
if price ~= 0 then endİpucu: FiveM'in Lua, standart Lua'yı birkaç ek kabul eder, örneğin
count += 1gibi bileşik atama. Düz Lua linter'ı hala onları bayraklayabilir. Editörünüz sunucuda çalışan bir satırdan şikayet ederse, bu genellikle neden.
'end' bekleniyor
@my_script/client/main.lua:130: 'end' expected (to close 'function' at line 12) near <eof>Bir blok (function, if, for, while, do) açıldı ve asla kapatılmadı. Lua, dosyanın sonuna ulaşınca öğrenir, bu mesajın sonundaki <eof>.
Parantez içindeki kısım faydalı: blok adlandırır ve başlangıç satırı. 12. satıra git ve bu bloğu, bir end eksik olduğunu bulana kadar izle. Girintilemeyi hizalamak belli yapar:
function OpenShop(id) -- line 12
if Config.Shops[id] then
ShowMenu(id)
-- the 'end' for this 'if' is missing
end -- this one closes the 'if', so the function is never closedKarşı tarafı hatası da var: bir end çok fazla '<eof>' expected near 'end' verir.
Aynı mantık parantezlere uygulanır. '}' expected (to close '{' at line 20) bir tablo kapatılmadığı anlamı ve ')' expected near bir çağrı veya koşul kapanış parantezi eksik anlamı. Tablo girişleri arasında eksik virgül aynı tür mesaj üretir:
Config.Shops = {
{ name = 'Bar', price = 10 } -- missing comma
{ name = 'Cafe', price = 12 },
}'=' bekleniyor yakınında
@my_script/shared/config.lua:9: '=' expected near ''bar''Ayrıştırıcı atama bekledi ve değer buldu. Sık bir durumu tablo girişi bir anahtarla ama = yok:
Config.Prices = {
['burger'] 10, -- wrong: missing =
['water'] = 5,
}Sadece ad veya değer gibi bir satır, Config.Debug true gibi, genellikle syntax error near verir. Düzeltme aynı: o satırda eksik veya yanlış yazılmış bulun.
tamamlanmamış string
@my_script/client/main.lua:33: unfinished string near '"You need 'String bir tırnak ile açıldı ve satır kapatılmadan öncesinde bitti. Tipik nedenler eksik kapanış tırnak, veya tek tırnaklı string'te apostrof:
-- wrong: the apostrophe ends the string
local msg = 'You can't do that'
-- right
local msg = "You can't do that"
local msg2 = 'You can\'t do that'Birkaç satıra yayılan metin için, normal bir string satır kesmesi içeremediğinden uzun bir string kullanın:
local help = [[
Line one
Line two
]]Satırı daha hızlı bulun
Tüm dosyayı okumayın. Dosyayı bildirilen satırda açın, sonra:
- Satırın kendisine ve üstündeki satıra bakın.
- İleti parantez içinde bir satır adlandırırsa, yerine o satırdan başlayın.
- Dosyanın yarısını açıklama yapın, sonra yeniden yükleyin. Hatanın kalıp kalmadığı hangi yarının hatayı içerdiğini söyler.
Daha iyi bir alışkanlık bunları server'ı yeniden başlatmadan önce yakalamaktır. Lua desteği ile bir editör yükleyin, örneğin Lua language server uzantısı ile VS Code ve Lua sürümünü FiveM ile eşleştirmek için 5.4 olarak ayarlayın. Yazarken kapalı blokları ve eksik parantezleri altını çizer. Kurulum kılavuzu FiveM için VS Code kurulumu içindedir.
Standart Lua araçlarını yüklüyseniz, luac -p file.lua dosyanın söz dizimini çalıştırmadan kontrol eder.
Kontrol listesi
| Belirti | Fix |
|---|---|
unexpected symbol near '<' |
Dosya HTML veya merge conflict markers var; ham dosyayı tekrar alın |
unexpected symbol near garip karakter |
Yapıştırılan kavisli tırnak veya garip karakter; satırı yeniden yazın |
'end' expected (to close 'function' at line N) near <eof> |
N satıra git ve end eksik bloğu bulun |
'<eof>' expected near 'end' |
Bir end çok fazla; üstündeki girintilemeyi kontrol edin |
'=' expected near |
= olmayan tablo anahtarı veya öncesi eksik virgül |
unfinished string near |
Eksik kapanış tırnak, veya string içinde apostrof |
!= veya && kod içinde |
~= ve and kullanın |
Kısa yanıtlar
Lua'da 'unexpected symbol near' ne anlama geliyor?
Lua ayrıştırıcısı, gidemeyen bir karakter veya sözcük buldu. near den sonra metin, durdurduğu kesin jetonudur. Gerçek hata o satırda veya hemen üstündeki satırda.
Neden 'end expected' hatanın bulunduğu satırdan farklı bir satıra işaret ediyor?
Lua, dosyanın sonuna ulaşıncaya kadar eksik end fark eder. Parantez içindeki kısım, to close 'function' at line 12 gibi, hangi bloğun asla kapatılmadığını söyler.
Neden bir script syntax hatası ile yüklenmek için başarısız olur ama asla runtime'a ulaşmaz?
Bir söz dizimi hatası, tüm dosyanın ayrıştırılmasını durdurur, bu yüzden kodu çalışmaz. Hatayı düzeltin ve resource tekrar yüklenir.
Bu sorunu yaşatmayan scriptler
Quest CreatorGörevler ve NPC diyalogları için oyun içinde düğüm düğüm kurulan görsel editör.Scripti gör →
Item Creator V2Animasyonlar, proplar, efektler ve daha fazlasıyla kullanılabilir eşyalar oluşturun — kod yazmadan.Scripti gör →
Shop CreatorBir dakikadan kısa sürede dükkân kurun — sahipler, çalışanlar, kasalar ve soygunlar dahil.Scripti gör →