最近我遇到了这个问题:分配运营商链理解.
在回答这个问题,我开始怀疑我自己的加法赋值运算符的行为的理解+=或任何其他operator=(&=,*=,/=等).
我的问题是,a下面的表达式中的变量何时更新到位,以便在评估期间其更改的值反映在表达式的其他位置,它背后的逻辑是什么?请看下面两个表达式:
表达1
a = 1
b = (a += (a += a))
//b = 3 is the result, but if a were updated in place then it should've been 4
Run Code Online (Sandbox Code Playgroud)
表达2
a = 1
b = (a += a) + (a += a)
//b = 6 is the result, but if a is not updated in place then it should've been 4
Run Code Online (Sandbox Code Playgroud)
在第一个表达式中,当(a …
假设我有一个有效的Python源代码,作为一个字符串:
code_string = """
# A comment.
def foo(a, b):
return a + b
class Bar(object):
def __init__(self):
self.my_list = [
'a',
'b',
]
""".strip()
Run Code Online (Sandbox Code Playgroud)
目标:我想获取包含函数定义源代码的行,保留空格.对于上面的代码字符串,我想得到字符串
def foo(a, b):
return a + b
Run Code Online (Sandbox Code Playgroud)
和
def __init__(self):
self.my_list = [
'a',
'b',
]
Run Code Online (Sandbox Code Playgroud)
或者,相当于,我很乐意在代码字符串中获取函数的行号:foo跨越2-3行,并__init__跨越5-9行.
尝试
我可以将代码字符串解析为AST:
code_ast = ast.parse(code_string)
Run Code Online (Sandbox Code Playgroud)
我可以找到FunctionDef节点,例如:
function_def_nodes = [node for node in ast.walk(code_ast)
if isinstance(node, ast.FunctionDef)]
Run Code Online (Sandbox Code Playgroud)
每个FunctionDef节点的lineno属性告诉我们该函数的第一行.我们可以用以下方法估计该函数的最后一行:
last_line = max(node.lineno for node in ast.walk(function_def_node)
if hasattr(node, …Run Code Online (Sandbox Code Playgroud) 我试图理解位置/偏移是如何工作的HTMLDocument.这里描述了位置/偏移语义.我的解释是,这些是屏幕字符序列中的索引HTMLDocument.
考虑从例如HTML 的HTMLDocument文件:
<html>
<head>
<title>An example HTMLDocument</title>
<style type="text/css">
div { background-color: silver; }
ul { color: red; }
</style>
</head>
<body>
<div id="BOX">
<p>Paragraph 1</p>
<p>Paragraph 2</p>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
当我在浏览器中打开此HTML时,我只看到"段落1"和"段落2"(并且没有前导空格或换行符).所以我认为"第1段"从抵消开始0.
但请考虑以下代码,其中我打印示例HTML中的文本和正文的偏移量:
import java.io.StringReader;
import javax.swing.text.Element;
import javax.swing.text.html.*;
public class Test {
public static void main(String[] args) throws Exception {
String html = " <html>\n"
+ " <head>\n"
+ " <title>An example HTMLDocument</title>\n"
+ " …Run Code Online (Sandbox Code Playgroud) 这怎么可能?我怎样才能更改标记为final的变量?
public class Main
{
public static void main(String[] args)
{
final int NUM;
NUM = 22;
NUM = 33;
System.out.println(NUM);
}
}
Run Code Online (Sandbox Code Playgroud)
我在Android中使用AIDE应用程序...它已成功编译并打印33.
这可能吗?我不认为是,但我不知道这是标准会说的,还是它的实施定义?我问,因为我想知道是否安全或者值得标记一个constexpr函数,比如noexcept
EX:
constexpr double to_meters(double y) noexcept? {
return y * 10;
}
constexpr double x = to_meters(y); // Clang-Tidy warns about possible exception without noexcept
Run Code Online (Sandbox Code Playgroud) 我正在编写一个将在多个地方使用的库方法。该方法的参数之一是对象的集合,该方法不会改变该集合。方法签名应该指定可变集合还是不可变集合?
public static void foo(List<Bar> list) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
优点:客户可以传入任何一个List<Bar>或ImmutableList<Bar>对他们来说更方便的任何一个。
缺点:list参数不会被改变并不是很明显。客户必须阅读文档和/或代码才能实现这一点。无论如何,客户可能会制作不必要的防御性副本。
public static void foo(ImmutableList<Bar> list) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
优点:客户端可以保证list参数不会被改变。
缺点:如果客户端有List<Bar>,他们必须先将其转换为 ,ImmutableList<Bar>然后再调用foo。这种转换浪费了很少的时间,而且不管客户喜欢与否,它都被强加给了客户。
注意:对于这个问题,我们假设所有客户端都可以使用 Guava ImmutableList,例如,因为库和客户端代码都属于已经ImmutableList在其他地方使用的相同代码库。
正如在这个问题中讨论的那样,equals方法java.awt.geom.Area被定义为
public boolean equals(Area other)
而不是重写equals方法Object.这个问题涵盖了"为什么",我对"如何强制Java使用最合适的equals方法" 感兴趣.
考虑这个例子:
public static void main(String[] args) {
Class<?> cls = Area.class;
Area a1 = new Area(new Rectangle2D.Double(1, 2, 3, 4));
Area a2 = new Area(new Rectangle2D.Double(1, 2, 3, 4));
System.out.println("Areas equal: " + a1.equals(a2)); // true
Object o1 = (Object) a1;
Object o2 = (Object) a2;
System.out.println("Objects equal: " + o1.equals(o2)); // false
// Given only cls, o1, and o2, how …Run Code Online (Sandbox Code Playgroud) 我想在 Java 中调用一系列 API 调用。要求是在后续的 API 调用请求中会用到一些 API 的响应。我可以使用某些循环来实现这一点。但我想以实现通用的方式使用设计模式。有什么帮助吗?
责任链不能满足我的需要,因为一开始我不知道我的请求上下文是什么。
String out = null;
Response res = execute(req);
out += res.getOut();
req.setXYZ(res.getXYZ);
Response res = execute(req);
out += res.getOut();
req.setABC(res.getABC);
Response res = execute(req);
out += res.getOut();
System.out.println("Final response::"+out);
Run Code Online (Sandbox Code Playgroud) Intellij 的 SonarLint 插件也为 TODO 提供警告。
默认情况下,Intellij 会突出显示 TODO 并将它们显示在提交对话框中。SonarLint 再次突出显示它是多余的。
此外,它还抑制了 Intellij 的一项有用功能 - Intellij 用蓝色突出显示 TODO,更容易识别和滚动到。
由于 SonarLint 插件,此功能被抑制。所以,我只想对待办事项禁用 sonarlint 警告。我怎样才能做到这一点?
intellij-idea suppress-warnings sonarlint sonarlint-intellij
我有一个处理Task对象的系统,现在我想进行一些基准测试。具体来说,我将创建许多(~100)个Task对象,每个对象都属于一组任务,并且我想在整个任务组上运行系统。我想要一种设计,可以轻松创建新的Task并将其与组相关联(轻松实现基准套件的多样化)。只有少数几个组,因此可以接受一些每组基础设施。
Tasks 可以包含任意Objects,所以我不能从像 JSON 这样的“数据”文件类型加载它们——只有 Java 代码足够通用来创建Tasks。此外,为了可维护性,我想Task在单独的 Java 文件中创建每个:
// SolveHaltingProblem.java
public class SolveHaltingProblem {
static Task getTask() {
Task task = new Task();
task.setName("SolveHaltingProblem");
... // Create task
return task;
}
static String getGroup() {
return "impossible-tasks";
}
}
Run Code Online (Sandbox Code Playgroud)
然后,应该很容易收集Tasks组:
List<Task> tasks = gatherTasksInGroup("impossible-tasks");
Run Code Online (Sandbox Code Playgroud)
没有一些愚蠢和容易出错的东西,比如:
List<Task> gatherTasksInGroup(String groupName) {
List<Task> list = new ArrayList<>();
if (groupName.equals("impossible-tasks")) {
list.add(SolveHaltingProblem.getTask());
list.add(SomeOtherHardProblem.getTask());
...
} else …Run Code Online (Sandbox Code Playgroud) java ×7
aide-ide ×1
android ×1
api ×1
c++ ×1
equals ×1
final ×1
html ×1
immutability ×1
javascript ×1
noexcept ×1
python ×1
reflection ×1
sonarlint ×1
swing ×1