Difference between revisions of "String extensions (日本語)"

(Created page with "このコードは有的な関数をいくつか追加するために文字列型のメタテーブルを変更します。 <source lang="lua"> local meta = getmetatable("")...")
 
m
 
Line 1: Line 1:
このコードは有的な関数をいくつか追加するために文字列型のメタテーブルを変更します。
+
このコードは実用的な関数を複数追加するために文字列型のメタテーブルを変更します。
  
 
<source lang="lua">
 
<source lang="lua">
Line 41: Line 41:
  
 
[[Category:Snippets (日本語)]]
 
[[Category:Snippets (日本語)]]
 +
{{#set:LOVE Version=any}}
 +
{{#set:Description=文字列型のメタテーブルへ追加関数を追加します。}}

Latest revision as of 05:40, 15 November 2016

このコードは実用的な関数を複数追加するために文字列型のメタテーブルを変更します。

local meta = getmetatable("") -- 文字列のメタテーブルを取得

meta.__add = function(a,b) -- + 演算子
    return a..b
end

meta.__sub = function(a,b) -- - 演算子
    return a:gsub(b,"")
end

meta.__mul = function(a,b) -- * 演算子
    return a:rep(b)
end

-- string.explode がある場合は (String exploding スニペットを確認してください)、さらにこれを追加することができます:
meta.__div = function(a,b) -- / 演算子
    return a:explode(b)
end

meta.__index = function(a,b) -- string[id] を行おうとする場合
    if type(b) ~= "number" then
        return string[b]
    end
    return a:sub(b,b)
end

一旦このコードを適用したならば、このようなことができます:

print("foo" + "bar") --> foobar
print("foo the bar" - " the ") --> foobar
print("repetition is repetetive " * 3) --> repetition is repetetive repetition is repetetive repetition is repetetive 
tbl = "foo bar" / " "
print(tbl[1]) --> foo
mystring = "abc"
print(mystring[2]) --> b