我制作了一个用于图形的小tkinter游戏turtle。它是对来自 Cracker Barrel 的 Triangle Peg Game 的模拟,能够告诉玩家在游戏中的任何时间点的下一个最佳移动,以及其他功能。Pegs 只是 的一个子类的实例turtle.RawPen,我保留了很多普通的RawPenaround实例来绘制代表移动的箭头。
我注意到当我重新启动游戏(调用turtle.bye())以杀死海龟窗口时,内存消耗实际上增加了,因为海龟似乎没有被删除。即使我window.clear()事先调用,清除_turtles了window.__dict__,仍然有对海龟的引用。我确保在重新启动期间删除了我对它们的所有引用,所以这不是问题。有没有办法真正删除乌龟,以便它可以被垃圾收集?
当我运行以下代码时,
#include <future>
int main()
{
std::promise<int> p;
p.set_value(1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
std::system_error被抛出。但是,当我在另一个线程中设置 promise 的值时,
#include <future>
#include <thread>
int main()
{
std::promise<int> p;
std::thread([&]{p.set_value(1);}).join();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
一切正常。根据我的理解std::promise,调用set_value不应该抛出异常,除非 promise 没有共享状态(即它已被移出)或者已经为其分配了值,即使那样它也会抛出std::future_error,而不是std::system_error。由于没有数据竞争或任何类似的情况,因此我是set_value从创建承诺的线程还是在另一个线程中调用都无关紧要。有什么我想念的吗?
我已经使用g++和clang尝试过这个,结果相同。具体来说,当我在顶部运行代码时,以下输出到stderr:
terminate called after throwing an instance of 'std::system_error'
what(): Unknown error -1
Aborted (core dumped)
Run Code Online (Sandbox Code Playgroud)
这些命令用于编译顶部的代码,
g++ main_thread.cpp -o main_thread -std=c++17 -g -Og
clang main_thread.cpp -o main_thread -std=c++17 -lstdc++
Run Code Online (Sandbox Code Playgroud)
这些用于编译底部的代码:
g++ …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个EnumMap简单地将枚举的常量映射到各自的序数.我想我可以如此简洁地这样做:
private static Map<Rank, Integer> defaultRankOrdering = new EnumMap<>(
Arrays.stream(Rank.values()).collect(
Collectors.toMap(Function::identity, e -> e.ordinal())));
Run Code Online (Sandbox Code Playgroud)
但是,编译器说它无法推断出任何类型变量toMap.考虑到这一点,我不明白为什么,根据以下两个参数的签名toMap:
public static <T, K ,U> Collector<T, ? ,Map<K, U>> toMap(Function<? super T, ? extends K> keyMapper,
Function<? super T, ? extends U> valueMapper)
Run Code Online (Sandbox Code Playgroud)
T应该推断为Rank,作为Arrays.stream(Rank.values())a Stream<Rank>,K也应该推断为Rank,作为Function.identity返回a Function<T, T>,并且U应该推断为Integer因为返回类型Enum.ordinal是int,Integer在这种情况下应该加框.
任何帮助将不胜感激.
在 Java 9 发布后,我在玩 JShell,并尝试导入我制作的包。由于我为其编码的整个应用程序将包含在该包中,因此除了一个类(我尚未编码)之外的每个类都是包私有的。我的类路径是正确的,但我仍然无法使用 JShell 中包中声明的任何类型(它会引发“找不到符号”错误)。我是否需要将它们公开以供访问,或者有什么方法可以测试包私有类?这是我试过的确切代码。
我当前的目录是
C:\Users\Sylvaenn\OneDrive\Documents\Programs\Java\src
Run Code Online (Sandbox Code Playgroud)
我的课程路径是
C:\Users\Sylvaenn\OneDrive\Documents\Programs\Java\cls
Run Code Online (Sandbox Code Playgroud)
包目录(用于字节码)是
C:\Users\Sylvaenn\OneDrive\Documents\Programs\Java\cls\collatz
Run Code Online (Sandbox Code Playgroud)
CollatzSequence是包含在collatz.
PS C:\Users\Sylvaenn> cd OneDrive\Documents\Programs\Java\src
PS C:\Users\Sylvaenn\OneDrive\Documents\Programs\Java\src> jshell
| Welcome to JShell -- Version 9
| For an introduction type: /help intro
jshell> import collatz.*;
jshell> CollatzSequence seq = new CollatzSequence(BigInteger.ONE);
| Error:
| cannot find symbol
| symbol: class CollatzSequence
| CollatzSequence seq = new CollatzSequence(BigInteger.ONE);
| ^-------------^
| Error:
| cannot find symbol
| symbol: class CollatzSequence
| CollatzSequence seq …Run Code Online (Sandbox Code Playgroud) 注意:这个问题确实已经在许多其他语言中得到了解答。但是,我找不到 Python 的答案,所以不要标记为重复。
Python 中的 if-else 语句和三元运算符在性能上有区别吗?
例如,实现可以定义sizeof(signed int)为两个字节并sizeof(unsigned int)为四个字节吗?在C / C ++ 参考中,我找不到任何明确禁止此操作的东西,尽管有符号和无符号版本类型的最小大小是相对应的,并且我看不出任何逻辑上的原因,即它们的大小应该不同。
c++ ×2
java ×2
python ×2
c ×1
collectors ×1
if-statement ×1
java-8 ×1
java-9 ×1
java-stream ×1
jshell ×1
lambda ×1
packages ×1
private ×1