gpt4 book ai didi

string - "Extend""string"表 - 怎么办?这甚至是个好主意吗?

转载 作者:行者123 更新时间:2023-12-04 14:07:20 24 4
gpt4 key购买 nike

我正在开发一个 Lua 库,我需要在其中将给定字符串的第一个字母大写。因此,我创建了以下函数:

local capitalize = function(s)
return string.gsub (s,
"(%w)([%w]*)",
function (first, rest)
return string.upper(first) .. rest
end,
1 )
end

这最初是一个“内部”函数,仅在我的库中使用。

现在我意识到我的用户在某些情况下会想要使用这个功能。

问题一
我正在考虑扩展字符串表,但我不确定如何进行。这样做就足够了,还是有更“面向lua”的方式?
string.capitalize = function(s)
... etc etc (same code as above)

问题2
我想知道猴子补丁字符串是否是个好主意。我应该提供一个公共(public)的“大写”功能吗?

编辑 - 万一将来有人发现这个, string recipes 上会显示一个更简单的“大写”功能。页:
str = str:gsub("^%l", string.upper)

最佳答案

我经常对内置表进行扩展。我主要是在我认为缺少某些非常重要的东西时这样做。大写并没有成为我的“重要”列表,而是一个叫做 string.split 的东西。有,例如。

当我这样做时,我遵循编程约定:

require 'stringutil' -- load extra stuff into string.*
require 'osutil' -- load extra stuff into os.*

你明白了。

当我小心时,我做的另一件事是确保我不会覆盖不存在的东西,这样我就可以适应 future :
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 中获取我想要的任何字段对我来说是不公平的。 table 。

关于string - "Extend""string"表 - 怎么办?这甚至是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2031943/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com