-1

これは、テーブルを使用せずに文字列を個々の文字のリストに分解する私のコードです。

function explode(s)
    if#s==1 then
        return s
    end
    return s:sub(1,1),explode(s:sub(2))
end

where #s==#({explode(s)})
このコードを短くするために、次のようにしました。

function explode(s)
    return#s>1 and(s:sub(1,1),explode(s:sub(2)))or s
end

しかし、'[条件] a and [結果値] b or [alternative] c' は複数の結果や代替案を必要としないため、うまくいきません。1 つのステートメントのみを使用して同じ結果を返す他の方法はありますか?

4

3 に答える 3

6

ここに別のアイデアがあります:

function explode(s)
    return s:match(("(.)"):rep(s:len()))
end

これはあまり効率的ではないことに注意してください。

于 2013-09-04T05:28:36.393 に答える
1

1行で次のことができます:

function explode(s)
  return unpack(#s > 1 and {s:sub(1,1), explode( s:sub(2) )} or {s})
end

警告、これは効率的ではありません。

于 2013-09-04T02:26:28.543 に答える