"تمديد" الجدول "السلسلة" - كيف نفعل ذلك؟ هل هي فكرة جيدة؟
-
19-09-2019 - |
سؤال
أقوم بتطوير مكتبة LUA التي احتاجت فيها إلى أحرف الأحرف الأولى من سلسلة معينة. وبالتالي قمت بإنشاء الوظيفة التالية:
local capitalize = function(s)
return string.gsub (s,
"(%w)([%w]*)",
function (first, rest)
return string.upper(first) .. rest
end,
1 )
end
كان هذا في البداية وظيفة "داخلي" تستخدم فقط على مكتبتي.
لقد أدركت الآن أن مستخدمي يريدون استخدام هذه الوظيفة في بعض الحالات.
السؤال رقم 1أنا أفكر في توسيع جدول السلسلة، لكنني غير متأكد من كيفية المتابعة. هل هو ما يكفي للقيام بذلك، أم أن هناك طريقة "موجهة نحو LUA"؟
string.capitalize = function(s)
... etc etc (same code as above)
السؤال 2أتساءل عما إذا كانت فكرة جيدة عن السلسلة المجيدة. يجب أن أقدم وظيفة "رسمية" عامة بدلا من ذلك؟
تحرير - في حالة العثور على أي شخص في المستقبل، يتم عرض وظيفة "الاستفادة من" أبسط "على وصفات السلسلة صفحة:
str = str:gsub("^%l", string.upper)
المحلول
كثيرا ما أجري ملحقات للجداول المدمجة. أفعل هذا في المقام الأول عندما أعتقد أن شيئا ما مهم حقا مفقود. لم تقدم القيمة القصيرة قائمة "المهمة"، ولكن شيء يسمى string.split
لديه، على سبيل المثال.
عندما أقوم بذلك، أتبع اتفاقية البرمجة:
require 'stringutil' -- load extra stuff into string.*
require 'osutil' -- load extra stuff into os.*
انت وجدت الفكرة.
الشيء الآخر الذي أقوم به عندما أكون حذرا، تأكد من عدم الكتابة فوق شيء غير موجود بالفعل، بحيث أكون مقبلا:
function extend(tab, field, val)
if tab[field] == nil then
tab[field] = val
return val
elseif tab[field] ~= val then
error(string.format('Extension %s.%s failed: already occupied by %s',
nameof(tab), field, tostring(val)))
else
return val
end
end
ال nameof
وظيفة مثل هذا:
function nameof(val)
for name, v in pairs(_G) do if v == val then return name end end
return '?'
end
ملاحظة النهائية: عندما أنوي مشاركة التعليمات البرمجية مع الآخرين، لا أميل إلى تعديل الجداول المحددة مسبقا. وفقا للحكم الذهبي، يتم مشاركة مساحة الاسم من قبل الجميع، وإذا كنت سأكون لدي أشخاص آخرين يستخدمون التعليمات البرمجية، فليس من العدل بالنسبة لي فقط الاستيلاء على مهما كانت الحقول التي أريدها في تحديدها مسبقا string
جدول.
نصائح أخرى
الجواب على السؤال 1 هو "نعم". الجواب على السؤال 2 هو "إنها مسألة ذوق".