2016-08-07 20 views
1

私は、ユーザー入力に基づいて特定の値を持つ文字列を返すことを目的とした単純なプログラムを作成しようとしていますが、これをスクリプト化する際に問題があります。例えばルア:関数とユーザー入力?

、私は

person1 = { 
name = "bob" , 
age = 70 , 
hair = "black" , 
}; 
person2 = { 
name = "dan", 
age = 40 , 
hair = "blonde" , 
}; 
describe = function(parent) 
print ("hello " .. parent.name .. " your are " .. parent.age .. " years old 
and your hair color is " .. parent.hair) 
end 
print ("who are you") ; 
answer = io.read(); 
describe (answer) 

をコンパイルする場合、私は、私は、入力としてperson1を書いた場合、スクリプトの読み取り、文字列を返すことを期待する:

こんにちはあなたは70歳ですボブあなたの髪の色は黒です

しかし、代わりにエラーを返します。

問題は、これを解決するにはどうすればよいですか? Luaでユーザー入力を使用する正しい方法は何ですか?

+1

あなたはあなたのコードをインデントする必要があり、それが簡単に私たちのために読み取ることができます。 – pschulz

答えて

1

名前にではなく、objectを関数に渡す必要があります。またはグローバルスコープでオブジェクトを検索:

person1 = { 
    name = "bob" , 
    age = 70 , 
    hair = "black" , 
}; 
person2 = { 
    name = "dan", 
    age = 40 , 
    hair = "blonde" , 
}; 
describe = function(parent) 
    parent = _G[parent] 
    print ("hello " .. parent.name .. " your are " .. parent.age .. " years old and your hair color is " .. parent.hair) 
end 
print ("who are you") ; 
answer = io.read(); 
describe (answer) 

の作業例:http://ideone.com/UJxnpx

+0

申し訳ありませんが、_Gは何をしていますか? – Hecedu

+0

グローバルスコープで、すべてのグローバル変数が格納されます。 [基本機能](http://www.lua.org/manual/5.1/manual.html#5.1)のマニュアルを参照してください。 – Jakuje

+0

'_G [parent]'を気にしないでください。次のようなものを使用してください: 'local data = {bob = {age = 70、hair =" black "}、dan = {age = 40、hair =" blonde "};' 'parent = data [parent] or {age = -1、hair = -1} 'である。ユーザー入力に基づくグローバル変数へのアクセス - その脆弱性 – FareakyGnome

関連する問題