Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua 如何修复字符串问题?_Lua_Coronasdk - Fatal编程技术网

Lua 如何修复字符串问题?

Lua 如何修复字符串问题?,lua,coronasdk,Lua,Coronasdk,每次我用我的Corona SDK运行它时,我都会得到: local background = display.newImage("black.png", 0, 0) local submit = display.newImage("submit.png") submit.x = display.contentWidth/2 submit.y = display.contentHeight-100 local nameInstructions = display.newText("Enter

每次我用我的Corona SDK运行它时,我都会得到:

local background = display.newImage("black.png", 0, 0)

local submit = display.newImage("submit.png")
submit.x = display.contentWidth/2
submit.y = display.contentHeight-100

local nameInstructions = display.newText("Enter your name", 10, 50, native.systemFont, 24)
local usersName = native.newTextField(10, 100, 350, 50)
usersName.inputType = "default"

local function keyboardListener (event)
    native.setKeyboardFocus(nil)
end

background:addEventListener("tap", keyboardListener)

local function reverseName(event)
    reverseUsersName = string.reverse(usersName)
end

submit:addEventListener("tap", reverseName)

local reverse = display.newText(reverseUsersName)
reverse.x = display.contentWidth/2
reverse.y = display.contentHeight/2

reverseName位于本地函数reverseNameevent中,但只要您按下或轻触submit,就会调用此函数。但是在这里,在点击sumbit之前,会调用local reverse=display.newTextreverseUsersName。这就是它给您带来错误的原因。

设置reverseUsersName(在第24行访问)的唯一位置是在函数reverseNameevent中。在这个函数中,reverseUsersName是一个全局变量,因此在函数运行一次之后,可以从脚本的其他部分访问该变量,但在此之前,该变量不存在

现在,在第22行中,您已将reverseName注册为tap事件的事件侦听器,但事件仅在脚本执行一次后生成,并且在对脚本回调(如reverseName和keyboardListener)的调用之间是回调,因此当您刚刚创建显示文本时,变量还不存在

因此,您必须要做的是更新reverseName侦听器中reverse显示项的文本,以便每次单击按钮时,反向名称都可见。正因为如此,您必须在reverseName函数上面声明您的reverse变量,这样它就可以作为一个upvalue使用。阅读Corona getting started文档,它们非常优秀,并在该函数中讨论这个微妙之处。您可能希望通过显示usersName而不是反向来初始化

所以你需要像这样的东西

Bad argument #-1 to 'newText' (string expected, got nil)

stack traceback:
    [C]: ?
    [C]: in function 'newText'
    ...Corona Projects/Assignment 4.3/main.lua/src/main.lua:24: in main chunk
请注意,如果希望每次按tap键时显示的字符串都反转,而不是第一次按,则必须使用

local reverse = display.newText(usersName)

local function reverseName(event)
    reverseUsersName = string.reverse(usersName)
    reverse.SetText(reverseUserName)
end

submit:addEventListener("tap", reverseName)
使用以下代码检查函数reverseName和文本objectreverse:

local function reverseName(event)
    reverseUsersName = string.reverse(reverseUsersName)
    reverse.SetText(reverseUserName)
end

reverseUsersName = usersName

*Corona API:

Where-1你能遵循这样一个准则:发表评论解释为什么它是有害的,这样作者就可以修正如果没有帮助,你就不投赞成票,但你不投反对票,你让赞成票来显示哪个答案是最有帮助的。你和krs的答案似乎都是正确的。为什么被否决+1.我这边。为什么没有对收到的任何答案进行投票或接受?如果没有任何用处,也许可以评论一下原因或延伸问题。
local reverse --[[ Initialize the object with a global scope,
                   so you can access it anywhere from the page. --]]
local function reverseName(event)
  --[[ In the below line, usersName is a table value. It is the reason 
         of the error. For getting the string from the text field, you 
         have to provide 'usersName.text' --]]
  reverseUsersName = string.reverse(usersName.text) 
  reverse.text = reverseUsersName -- Assign the text field value to your text object
end

submit:addEventListener("tap", reverseName)

reverse = display.newText("",20,20,nil,20) --see the parameters of display.newText()*
reverse.x = display.contentWidth/2
reverse.y = display.contentHeight/2