是否有调试系统允许我记录javascript函数调用及其参数?这将允许我在实时/客户端情况下跟踪和调试应用程序,而不会因手动记录而导致性能下降.
编辑:我不是在谈论使用"控制台"窗口手动调用函数并查看结果,或者手动将"trace"或"log"命令添加到我的javascript中.我需要它来处理任何正在运行的JavaScript.
我有以下代码:
public String testExitPoints() {
boolean myBoolean = false;
try {
if (getBoolean()) {
return "exit 1";
}
if (getBoolean()) {
throw new RuntimeException();
}
} finally {
myBoolean = true;
}
if (getBoolean()) {
return "exit 2";
}
return "exit 3";
}
public static boolean getBoolean() {
Random rand = new Random();
return rand.nextInt() > 100;
}
Run Code Online (Sandbox Code Playgroud)
现在IntelliJ的想法给了我getBoolean()以下提示的第二次和第三次调用:
Condition 'getBoolean()' is always 'false'
Run Code Online (Sandbox Code Playgroud)
现在据我所知,这不是真的,因为getBoolean()可以是true或者false,取决于生成的随机值.我在这里遗漏了什么,或者是IntelliJ Idea中的错误?
我有一个源自ANTLR Parser Generator for Java的AST.我想要做的是以某种方式构建源代码的控制流图,其中每个语句或表达式是唯一的节点.我知道必须有一些这种识别的递归,我想知道你会建议什么是最好的选择,如果ANTLR有一个工具集我可以用于这项工作.干杯,克里斯
编辑 - 我主要关心的是从AST获得控制流图(CFG).这样我就可以获得源代码的树形表示.为了澄清,源代码和实现语言都是Java.
所以,我试过了break,next而且return.它们都会出错,exit当然有效,但完全退出.那么,一个人怎么会case...when"太快"?
例:
case x
when y; begin
<code here>
< ** terminate somehow ** > if something
<more code>
end
end
Run Code Online (Sandbox Code Playgroud)
(上面是某种形式的伪代码,只是为了给出我所要求的一般概念[开始...结束时使用了希望break可行].
而且,虽然我在这里,是否有更优雅的方式传递块case...when?
因为Swift没有抽象方法,所以我创建了一个方法,其默认实现无条件地引发错误.这会强制任何子类重写抽象方法.我的代码看起来像这样:
class SuperClass {
func shouldBeOverridden() -> ReturnType {
let exception = NSException(
name: "Not implemented!",
reason: "A concrete subclass did not provide its own implementation of shouldBeOverridden()",
userInfo: nil
)
exception.raise()
}
}
Run Code Online (Sandbox Code Playgroud)
问题:因为函数需要返回一个值,并且上面的函数没有return语句,编译失败. 我需要一些方法来说服编译器这个函数永远不会完成执行,因为它总会引发错误.
如果所有的错误处理看起来都是库级的,那么在Swift中怎么做呢?因此超出了对编译器的理解?是否有任何语言级功能(希望优雅地)终止程序的执行?
我有一个方法,根据谓词,将返回一个未来或另一个.换句话说,返回未来的if-else表达式:
extern crate futures; // 0.1.23
use futures::{future, Future};
fn f() -> impl Future<Item = usize, Error = ()> {
if 1 > 0 {
future::ok(2).map(|x| x)
} else {
future::ok(10).and_then(|x| future::ok(x + 2))
}
}
Run Code Online (Sandbox Code Playgroud)
这不编译:
error[E0308]: if and else have incompatible types
--> src/lib.rs:6:5
|
6 | / if 1 > 0 {
7 | | future::ok(2).map(|x| x)
8 | | } else {
9 | | future::ok(10).and_then(|x| future::ok(x + 2))
10 | | }
| |_____^ expected …Run Code Online (Sandbox Code Playgroud) 在Python中,该with语句用于确保始终调用清理代码,无论抛出异常还是返回函数调用.例如:
with open("temp.txt", "w") as f:
f.write("hi")
raise ValueError("spitespite")
Run Code Online (Sandbox Code Playgroud)
在这里,即使引发了异常,文件也会关闭.这里有一个更好的解释.
Ruby中有这个构造的等价物吗?或者你可以编写一个代码,因为Ruby有延续吗?
public Foo doDangerousStuff() throws Exception {
try {
dangerousMethod();
return new Foo();
} catch (Exception e) {
throw e;
} finally {
mustBeCalledAfterDangerousMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
这与我们省略catch子句的行为有什么不同吗?
public Foo doDangerousStuff() throws Exception {
try {
dangerousMethod();
return new Foo();
} finally {
mustBeCalledAfterDangerousMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
[编辑]为了清除混淆,是的,catch除了重新抛出异常之外,该块不执行任何操作.我想知道这是否会在finally调用块时引起某种不同的排序(假设调用者捕获了抛出的异常),但是从我从答案推断出来的情况来看,它并没有.
铁锈中的惯用语for/else:
在 Python 中,我可以使用for/else检查循环是否for在语句处终止break或“正常”完成:
prod = 1
for i in range(1, 10):
prod *= i
if prod > 123:
break
else:
print("oops! loop terminated without break.")
Run Code Online (Sandbox Code Playgroud)
Rust 有类似的方法吗?这是我最接近的,但并不是特别相似。
let mut prod = 1u64;
let mut found = false;
for i in 1..10 {
prod *= i;
if prod > 123 {
found = true;
break;
}
}
if !found {
println!("oops! loop terminated without break.");
}
Run Code Online (Sandbox Code Playgroud)
似乎有关于Rust Internals的讨论;然而,这更多的是关于未来的可能性,而不是惯用的。 …
control-flow ×10
java ×3
ruby ×2
rust ×2
swift ×2
abstract ×1
asynchronous ×1
compilation ×1
debugging ×1
for-loop ×1
future ×1
iteration ×1
javascript ×1
logging ×1
parsing ×1
python ×1
throw ×1
trace ×1