登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> CLQ工作室开源代码 >> 主题: [五星推荐][ts/lua/typescript]⭐ typescript-to-lua 无法模拟 lua 类的类函数 ( static )[更新,已解决]     [回主站]     [分站链接]
标题
[五星推荐][ts/lua/typescript]⭐ typescript-to-lua 无法模拟 lua 类的类函数 ( static )[更新,已解决]
clq
浏览(322) + 2022-10-29 18:48:43 发表 编辑

关键字:

[2022-11-09 21:42:09 最后更新]
[五星推荐][ts/lua/typescript] typescript-to-lua 无法模拟 lua 类的类函数 ( static )[更新,已解决]

//lua View 的 ts 接口
//declare class View
declare class View_ //因为 typescript-to-lua 转换后的 ":" 调用问题,因此废弃这个,使用下面的 namespace View
//declare namespace View
{

//name: string;
public static Hide(view:any):void;
public static Show(view:any):void;
//设备视图的背景色
//public static SetBackgroundColor(view:any, hex_color:string):void; //2022.10
//typescript-to-lua 对 static 的调用似乎是错误的,这时候它仍然使用 ":" 运算符而不是 ":" ,这导致会传递一个不存在的 this 参数过去
//所以为了兼容这种情况,只好使用 namespace 中的函数来代替 class 中的类函数
static SetBackgroundColor(view:any, hex_color:string):void; //2022.10

}//

declare namespace View {

function Hide(view:any):void;
function Show(view:any):void;

//设备视图的背景色
function SetBackgroundColor(view:any, hex_color:string):void; //2022.10

}//namespace

----------------------------------------------------------------
令人震惊的是 ts 中的 static 函数中确实可以使用 this 参数!
这可以用在 https://www.typescriptlang.org/zh/play 中在线运行以下代码证实。

const anExampleVariable = "Hello World"
console.log(anExampleVariable)

// 可以点击上方的 “示例” 或 “新闻”,以了解更多关于语言的信息。"
// 或者删除这些注释并且开始使用,整个演练场的世界都属于你。

class View {

//name: string;
public static Hide(view:any):void
{}
public static Show(view:any):void
{}
//设备视图的背景色
public static SetBackgroundColor(view:any, hex_color:string):void //2022.10
{
console.log(this.toString());
}

}//


View.SetBackgroundColor("", "");

----------------------------------------------------------------
这基本上宣布了使用 TypeScript 作为一个万能中间逻辑语言可能性的死刑。

从目前的情况来看,要用 ts 来模拟常用语言中的类,必须将 class 中的 static 函数模拟成另外一个名称的 namespace ,这在写 xx.d.ts 的时候倒还是可以解决的。
但要像我想的那样,用 ts 来写算法,恐怕是不合适的了。


================================================================
更新,看好了,以下是翻遍整个中文网 ts 世界都没找到的解决办法,这才是与其他常用语言相同的 static 静态函数的写法。看到的同学非得请我吃饭不可...

class View_2 //因为 typescript-to-lua 转换后的 ":" 调用问题,因此废弃这个,使用下面的 namespace View
{

//name: string;
public static Hide(view:any):void {}
public static Show(view:any):void {}
//设备视图的背景色
//public static SetBackgroundColor(view:any, hex_color:string):void; //2022.10
//typescript-to-lua 对 static 的调用似乎是错误的,这时候它仍然使用 ":" 运算符而不是 ":" ,这导致会传递一个不存在的 this 参数过去
//所以为了兼容这种情况,只好使用 namespace 中的函数来代替 class 中的类函数
//static SetBackgroundColor(view:any, hex_color:string):void; //2022.10

//这个才是与其他语言一样的 static 静态函数
public static SetBackgroundColor:any=function(a:string):void{};
public static SetBackgroundColor2=function(a:string):void{};
//这个语法的 d.ts 很难写,我是在 https://www.typescriptlang.org/zh/play? 中生成的,如下:
// declare class View_2 {
// static Hide(view: any): void;
// static Show(view: any): void;
// static SetBackgroundColor: any;
// static SetBackgroundColor2: (a: string) => void;
// }

}//

---------------------------------------------------------------
declare class View_2 {
static Hide(view: any): void;
static Show(view: any): void;
static SetBackgroundColor: any;
static SetBackgroundColor2: (a: string) => void;
}
SetBackgroundColor 与 SetBackgroundColor 的区别在于:两者都能通过 ts 和 lua 的编译并正确运行,但前者在 vscode 和微软官网上都无法显示代码提示,而后者则完美支持。
要说的是后面的第二种写法,这么复杂的语法 ts 仍然能顽强地实现,并且更顽强的弹出代码提示 ... ... 佩服。

ts 的作者真乃神人也,但这语法 ... 确实不是普通的人能完整把握的。希望他以后少改一点,要不搞成 C# 那样越来越让人不认识 ... ... 当然了这个帖子他老人家是无论如何不会看到的,看到了他也不懂中文 ......










总数:0 页次:1/0 首页 尾页  
总数:0 页次:1/0 首页 尾页  


所在合集/目录
lua的坑 更多
严重的坑 更多



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1