"تمديد" الجدول "السلسلة" - كيف نفعل ذلك؟ هل هي فكرة جيدة؟

StackOverflow https://stackoverflow.com/questions/2031943

  •  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 هو "إنها مسألة ذوق".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top