当前位置:  开发笔记 > 编程语言 > 正文

如何在JavaScript中模拟宏?

如何解决《如何在JavaScript中模拟宏?》经验,为你挑选了4个好方法。

我知道JavaScript不支持宏(Lisp风格的),但我想知道是否有人有解决方案可能模拟宏?我用谷歌搜索,其中一个解决方案建议使用eval(),但正如他所说,将是非常昂贵的.

他们并不一定非常喜欢.我只想用它们做简单的事情.它不应该使调试更加困难:)



1> Luís Oliveir..:

你可以使用parenscript.那将为你提供Javascript的宏.


@CesarCanassa parenscript是一个Common Lisp库,适用于大多数(可能是所有)主要实现(我自己尝试过).Clojurescript是一个更适合市场的市场,适合不同的观众.
不仅是不同的解决方案,也是不同的语言

2> Anderson Gre..:

Mozilla的一个库(称为SweetJS)旨在模拟JavaScript中的宏.例如,您可以使用SweetJS替换function关键字def.



3> Anders Rune ..:

现在也可以使用ClojureScript将clojure编译为javascript并以这种方式获取宏.注意ClojureScript使用Google Closure.



4> 小智..:

我用javascript写了一个gameboy模拟器,我用这种方式模拟cpu模拟的宏:

宏代码(该函数返回带有宏代码的字符串):

function CPU_CP_A(R,C) { // this function simulates the CP instruction, 
  return ''+             // sets CPU flags and stores in CCC the number
  'FZ=(RA=='+R+');'+     // of cpu cycles needed
  'FN=1;'+
  'FC=RA<'+R+';'+
  'FH=(RA&0x0F)<('+R+'&0x0F);'+
  'ICC='+C+';';
}

使用"宏",所以代码是"动态"生成的,我们不需要对它进行函数调用,也不需要为每个构造写出大量重复的代码......

OP[0xB8]=new Function(CPU_CP_A('RB',4)); // CP B
OP[0xB9]=new Function(CPU_CP_A('RC',4)); // CP C
OP[0xBA]=new Function(CPU_CP_A('RD',4)); // CP D
OP[0xBB]=new Function(CPU_CP_A('RE',4)); // CP E
OP[0xBC]=new Function('T1=HL>>8;'+CPU_CP_A('T1',4)); // CP H
OP[0xBD]=new Function('T1=HL&0xFF;'+CPU_CP_A('T1',4)); // CP L
OP[0xBE]=new Function('T1=MEM[HL];'+CPU_CP_A('T1',8)); // CP (HL)
OP[0xBF]=new Function(CPU_CP_A('RA',4)); // CP A

现在我们可以像这样执行模拟代码:

OP[MEM[PC]](); // MEM is an array of bytes and PC the program counter

希望能帮助到你...


模拟器的源代码可以在任何地方使用吗?
我不认为这是真的.它可能是一个eval,但eval只发生一次.一旦它是一个函数,它应该以正常的函数速度执行任意次数.
推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有