C# 我可以在Nlua中使用静态类吗?
首先也是最重要的一点,我不是以英语为母语的人,对于这个问题可能产生的任何沟通错误,我深表歉意。另外,我不能真正理解你提出问题的一些指导原则,所以按照我的理解去做。因此,如果我违反了任何习俗,请告诉我 背景 我一直在制作一个应用程序,试图实现类似xaml的代码热重载。由于我不能直接使用c#之类的编译语言,我决定使用第三方脚本语言,我想我可以在其中编写一点应用程序逻辑,然后更快地将其部署到设备上,因为我只需按一个按钮就可以将代码发送出去。所以,你可以把它想象成是世界博览会的客户 我决定使用lua作为脚本语言,不仅因为它编写代码非常简单,而且因为它有一个很好的.net绑定,当然我说的是Nlua。而且,由于ironpython3还没有准备好投入生产,老实说,我有什么选择呢 我面临的问题 因此,由于我必须绑定一些xamarin.essentials的东西以使我更容易编写应用程序的lua端,因此我必须与一些具有静态方法的对象进行交互。我认为在Nlua中使用静态方法是非常直观和直接的,尽管到目前为止我似乎错了 如何重现这个问题C# 我可以在Nlua中使用静态类吗?,c#,xamarin,lua,nlua,C#,Xamarin,Lua,Nlua,首先也是最重要的一点,我不是以英语为母语的人,对于这个问题可能产生的任何沟通错误,我深表歉意。另外,我不能真正理解你提出问题的一些指导原则,所以按照我的理解去做。因此,如果我违反了任何习俗,请告诉我 背景 我一直在制作一个应用程序,试图实现类似xaml的代码热重载。由于我不能直接使用c#之类的编译语言,我决定使用第三方脚本语言,我想我可以在其中编写一点应用程序逻辑,然后更快地将其部署到设备上,因为我只需按一个按钮就可以将代码发送出去。所以,你可以把它想象成是世界博览会的客户 我决定使用lua作为
使用NLua;
Lua LuaState{get;set;}
LuaState=newlua();
表示法,它应该说出给定给函数的参数,例如tts.speak(“hello world”)
实际行为
执行带有
符号的调用时,lua解释器抛出以下错误:
[字符串“chunk”]:1:尝试调用nil值(字段“speak”)
到目前为止我所尝试的
State.UseClrPackage()代码>方法,然后手动导入内容,它也不起作用,无法访问任何方法或变量,lua说它们都是“nill”
所以,正式地说,我尝试了我能做的一切,甚至在这里做了一次搜索,看看我是否能找到任何启发我的东西,尽管不幸的是,没有运气。现在,你推荐我用什么?有什么地方我忽略了吗?欢迎来到Stack Overflow。你的问题相当冗长和详细,我建议将问题简化为一个简单的问题,我编辑了这个问题,希望能够解决结束它背后的原因。我做的最重要的事情是添加一组最小的指令来重现我遇到的问题。注意:我尝试了我能想到的一切,无法解决屏幕阅读器中出现的格式问题,但其中一些问题仍然存在,原因不明。
async void btnStartCode_Clicked(object sender, EventArgs e)
{
try
{
LuaState.DoString(edCode.Text);
}
catch (Exception exc)
{
await DisplayAlert("error", $"A fatal error was incountered while running your code\nException details:\n\tException type: {exc.GetType().ToString()}\n\terror message from interpreter:{exc.Message}.", "OK");
}
}
using System;
using System.Collections.Generic;
using System.Text;
using Xamarin.Essentials;
namespace autoaccess.scriptables
{
public class tts
{
public async void speak(params object[] messages)
{
foreach(var message in messages)
{
if (message == null)
{
await TextToSpeech.SpeakAsync("null value");
return;
}
await TextToSpeech.SpeakAsync(message.ToString());
}
}
}
}
LuaState["text_to_speech"=typeof(TextToSpeech);