0

まず、私のコード行を表示します。

    local names = {}
    str = "Hello World"
    for count = 0, #str do
         names[count] = string.sub(str, count, count)
         names[count].id = count
    end

ところで、これは単なるサンプルですが、私のコンセプトはそこにあります。とにかく、フィールド'?'にインデックスを付けようとするとエラーが返され続けます。(nil値)。このエラーはどういう意味ですか?私は他のプロジェクトでこのようなものを使ってみましたが、うまくいきました。それが画像であったことを除いて、それでもなぜそれがこのインスタンスに適用されないのですか?インデックス作成はどこに適用されますか?

4

2 に答える 2

3

コードに2つの問題があります。

  1. 0からインデックスを作成しています。Luaはインデックスを1から開始します。forループは1から開始する必要があります。
  2. テーブルに文字列を割り当ててから、文字列のidフィールドに割り当てようとしています。文字列を除いて、フィールドはありません。これが実際にエラーをスローしているものです。
于 2012-04-24T08:09:26.077 に答える
3

ここでの問題は、デフォルトのlua値タイプの使用方法について混乱していることです。テーブルとuserdataは、プロパティを設定/取得する2つのデータ型のみです。私はあなたのコードを分解するので、多分それはあなたがあなたが望むことをするためにテーブルを使う方法を理解するのを助けるでしょう...

名前と呼ばれる空のテーブルを作成することから始めます。そのテーブル内には、参照できる値や属性はまったくありません。

local names = {}

forループでは、文字列'str'から一度に1文字ずつ引き出し、countが指すインデックスの名前に割り当てます(luaの文字列とテーブルのインデックスは1であるため、1から開始する必要があります。ベース、ゼロベースではありません)。したがって、2番目のループでは、基本的にこれを実行しています。

names[1] = 'H'

(最初のループではカウンターは0なので、string.sub(str、0、0)は空の文字列を返します)

その直後、あなたは一度にいくつかのステップを実行しています、そしてこれはあなたが混乱しているところです。それを壊すことはあなたのためにそれを片付けるはずです。

local a_char = names[count] -- get the string value in index 'count'
a_char.id = count           -- try to set property id on that string value
names[count] = a_char       -- assign this value to index 'count' in table names

上記のコードは、names [count] .id=countと論理的に同等です。文字列値に「id」というプロパティを作成/設定しようとしています。文字列にはそのプロパティがなく、作成することは許可されていません。そのため、インタプリタがあなたに吠えます。

論理情報をluaテーブルにまとめて格納する場合は、ネストされたテーブルを使用するのが一般的です。基本的に、各文字をテーブル「names」内の位置とともに文字列「str」に格納したいようです。これはあなたがそれをする方法です:

local names = {}
str = "Hello World"
for count = 1, #str do
    local cha, idx = string.sub(str, count, count), count
    -- below creates an anonymous table with two properties (character, and id) and
    -- adds it to the end of table 'names'.
    table.insert(names, {character = cha, id = idx})
    -- or 
    -- names[count] = {character = cha, id = idx}
end

これにより、情報が希望どおりに論理的にグループ化され、データは次のようになります。

{ {character = 'H', id = 1}, {character = 'e', id = 2} ... }

表の最初の項目のIDが必要な場合は、上記のように参照します。

local first_id = names[1].id -- access property id from table in first index in table names
于 2012-04-24T16:11:59.667 に答える