假设我在lua中有一个字符串:
> s = "abc123"
我想获得s1
这只是s的第一个字符,如果s
为空,则为空。
我尝试过使用
> s1 = s[1]
和
> s1 = s[0]
如何在不使用外部Lua库的情况下获取第一个字符
但两者都只返回nil
。
答案 0 :(得分:12)
您可以使用string.sub()
获取长度为1的子字符串:
> s = "abc123"
> string.sub(s, 1, 1)
a
这也适用于空字符串:
> string.sub("", 1, 1) -- => ""
答案 1 :(得分:10)
您还可以使用以下较短的变体:
s:sub(1, 1)
答案 2 :(得分:0)
local string_meta = getmetatable('')
function string_meta:__index( key )
local val = string[ key ]
if ( val ) then
return val
elseif ( tonumber( key ) ) then
return self:sub( key, key )
else
error( "attempt to index a string value with bad key ('" .. tostring( key ) .. "' is not part of the string library)", 2 )
end
end
local str = "Hello"
print(str[1])