我在Node.js中为多种语言创建一个非常原始的在线解释器/编译器,仅用于体验,并且在运行JS代码时遇到了一个非常奇怪的问题。
当用户发帖时,我会接受他们的输入,将其稍微转义,然后将其直接输入命令行(糟糕的做法,我知道,但是我会在以后的某个新系统中转移到#39 ; t涉及直接CMD)这会转义双引号和\ n,\ r等等。
在获得输入时,我child_process.exec
使用命令(是的,我正在给它回调,但它是一个相当长的,我认为没有必要写)< / p>
let parentResults = cp.exec(`node ./builders/${this.builder}.js "${this.escapedCode}"`);
// First parameter represents the builder to run the user input with
// and escaped code is self-explanatory
处理JS的构建器只有一行:
eval(process.argv[2]); // Already somewhat-escaped code
现在,当我写一些像
这样的东西function foo(x) {
console.log(x);
}
foo(5);
我在5
的控制台中获得了正确的输出。
但是当我做
之类的事情时let foo = function(x) {
console.log(x);
}
foo(5);
我收到错误说
console.log(x);
^
SyntaxError: Unexpected identifier
当我使用箭头语法时也会发生同样的事情。我不知道什么可能绊倒它。有什么想法或帮助吗?
答案 0 :(得分:3)
我认为问题是你在第二种情况下 private void addNewBubble() {
BubbleLayout bubbleView = (BubbleLayout)LayoutInflater.from(MainActivity.this).inflate(R.layout.bubble_layout, null);
bubbleView.setOnBubbleRemoveListener(new BubbleLayout.OnBubbleRemoveListener() {
@Override
public void onBubbleRemoved(BubbleLayout bubble) {
finish();
System.exit(0);
}
});
bubbleView.setOnBubbleClickListener(new BubbleLayout.OnBubbleClickListener() {
@Override
public void onBubbleClick(BubbleLayout bubble) {
Intent in = new Intent(MainActivity.this, PopUpWindow.class);
in.putExtra("yourBoolName", isCheckedValue );
startActivity(in);
}
});
bubbleView.setShouldStickToWall(true);
bubblesManager.addBubble(bubbleView, 60, 20);
}
之后错过了;
。通常它不会成为一个问题,因为javascript会将}
解释为声明的结尾,但是你说你要删除\n
,所以这就是它失败的原因。
答案 1 :(得分:2)
第二个例子中缺少的分号正在绊倒它。它应该是:
let foo = function(x) {
console.log(x);
};
foo(5);
您的构建器似乎正在删除换行符,否则将允许javascript处理缺少分号。 (有关js何时可以自动插入分号的更多说明,请参阅here。)