Java标准库是否具有功能更新的任何功能数据结构,如不可变集,列表等?
我有几个我想知道的案例.首先,如果你没有构造函数:
class NoCons { int x; }
Run Code Online (Sandbox Code Playgroud)
当我这样做时new NoCons(),默认构造函数被调用.它究竟做了什么?它是设置x为0,还是在其他地方发生?
如果我遇到这种情况怎么办:
class NoCons2 extends NoCons { int y; }
Run Code Online (Sandbox Code Playgroud)
我打电话后会发生什么new NoCons2()?是否NoCons默认构造函数被调用,然后NoCons2是构造函数?他们各自将各自x和y字段设置为0吗?
这个版本怎么样:
class Cons2 extends NoCons { int y; public Cons2() {} }
Run Code Online (Sandbox Code Playgroud)
现在我有一个构造函数,但它不会调用超类的构造函数.如何x初始化?如果我有这种情况怎么办?
class Cons { int x; public Cons() {} }
class NoCons2 extends Cons { int y; }
Run Code Online (Sandbox Code Playgroud)
是否会Cons调用构造函数?
我可以尝试所有这些示例,但我无法确定何时运行默认构造函数.考虑这一点的一般方法是什么,以便我知道未来情况会发生什么?
鉴于吃异常总是糟糕的juju和重新抛出异常会丢失调用堆栈,重新考虑以下因素的正确方法是什么?
吃异常:
try
{
… do something meaningful
}
catch(SomeException ex)
{
// eat exception
}
Run Code Online (Sandbox Code Playgroud) 在给定NumPy矩阵(2D数组)的情况下,返回数组中的最小值/最大值n(及其索引)的有效方法是什么?
目前我有:
def n_max(arr, n):
res = [(0,(0,0))]*n
for y in xrange(len(arr)):
for x in xrange(len(arr[y])):
val = float(arr[y,x])
el = (val,(y,x))
i = bisect.bisect(res, el)
if i > 0:
res.insert(i, el)
del res[0]
return res
Run Code Online (Sandbox Code Playgroud)
这比pyopencv生成我想要运行它的数组的图像模板匹配算法要长三倍,我认为这很愚蠢.
使用CMake创建项目时出错:
-- Could NOT find Threads (missing: Threads_FOUND)
Run Code Online (Sandbox Code Playgroud)
错误日志显示CMake绊倒了一些真正平庸的东西:
/usr/bin/cc -std=c11 -D_GNU_SOURCE -Wall -Wextra -Wpointer-arith -Wundef -Wvla -Wwrite-strings -Werror -Wno-error=extra -Wno-error=deprecated-declarations -Wno-error=sign-compare -Wno-error=strict-aliasing -Wno-error=type-limits -Wno-unused-parameter -Wno-error=unused-variable -Wno-error=undef -Wno-error=uninitialized -Wlogical-op -Wno-error=maybe-uninitialized -Waggregate-return -Wnested-externs -Wold-style-definition -Wstrict-prototypes -march=native -o CMakeFiles/cmTryCompileExec2533162744.dir/CheckIncludeFiles.c.o -c /mnt/shared/fooproj/build/release/CMakeFiles/CMakeTmp/CheckIncludeFiles.c
/mnt/shared/fooproj/build/release/CMakeFiles/CMakeTmp/CheckIncludeFiles.c:5:5:
error: function declaration isn’t a prototype [-Werror=strict-prototypes]
int main(){return 0;}
^
/mnt/shared/fooproj/build/release/CMakeFiles/CMakeTmp/CheckIncludeFiles.c:
In function ‘main’:
/mnt/shared/fooproj/build/release/CMakeFiles/CMakeTmp/CheckIncludeFiles.c:5:5:
error: old-style function definition [-Werror=old-style-definition]
cc1: all warnings being treated as errors
[...]
Source:
/* */
#include <pthread.h>
int main(){return 0;}
Run Code Online (Sandbox Code Playgroud)
这真的应该没有理由让CMake认为Threads不存在.我该如何解决这个问题?
我是Docker的新手,我似乎无法连接到任何容器.
我安装了Docker Toolbox.现在我正试图让Shipyard工作.我按照Docker Quickstart Terminal中的步骤进行操作.说明说:
部署后,脚本将输出URL以及凭据信息进行连接.
Shipyard安装程序以:
Shipyard available at http://10.0.2.15:8080
Username: [elided] Password: [elided]
Run Code Online (Sandbox Code Playgroud)
但是,我去了http://10.0.2.15:8080我的浏览器,它没有连接.
在另一个Docker Quickstart终端中,我做了一个docker ps查看容器是什么并获取其IP地址,我得到了:
$ docker inspect a4755 | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.8",
"IPAddress": "172.17.0.8",
Run Code Online (Sandbox Code Playgroud)
我不确定为什么IP不同,但我试图连接到http://172.17.0.8:8080,这也不起作用.http://localhost:8080也失败了.
这也发生在我试图运行docker-gunicorn-nginx时 - 一切都已启动,但我无法连接到机器.
是什么赋予了?
实现键盘处理的好方法是什么?在我编写键盘交互式程序(如俄罗斯方块游戏)的任何语言中,我最终得到的代码如下所示:
for event in pygame.event.get():
if event.type == KEYDOWN:
if False: pass #make everything an elif
elif rotating: pass
elif event.key == K_q:
elif event.key == K_e:
elif event.key == K_LEFT:
curpiece.shift(-1, 0)
shadowpiece = curpiece.clone(); setupshadow(shadowpiece)
elif event.key == K_RIGHT:
curpiece.shift(1, 0)
shadowpiece = curpiece.clone(); setupshadow(shadowpiece)
Run Code Online (Sandbox Code Playgroud)
(缩短).我不喜欢这个,因为这必须在我的主循环中,并且它与程序的所有部分混淆.这也使得用户配置屏幕不可能改变哪个键映射到哪个动作.使用某种形式的函数回调是否有良好的模式?
这是一个纯粹的理论问题.
给出三个简单的类:
class Base {
}
class Sub extends Base {
}
class SubSub extends Sub {
}
Run Code Online (Sandbox Code Playgroud)
并且函数意味着对这些类进行操作:
public static void doSomething(Base b) {
System.out.println("BASE CALLED");
}
public static void doSomething(Sub b) {
System.out.println("SUB CALLED");
}
Run Code Online (Sandbox Code Playgroud)
似乎是以下代码:
SubSub ss = new SubSub();
doSomething(ss);
Run Code Online (Sandbox Code Playgroud)
可以合法地导致打印BASE CALLED或SUB CALLED,因为SubSub可以同时打印到这两个.实际上,删除函数的Sub版本会导致打印BASE CALLED.实际发生的是打印"SUB CALLED".这似乎意味着调用哪个函数不依赖于定义函数的顺序,因为首先调用了Base版本.
Java只是查看函数的所有不同版本并选择需要最小遍历继承堆栈的函数吗?这标准化了吗?它是在任何文档中写出来的吗?
阅读时,const_cast我遇到了如下句子:
使用const_cast只能进行以下转换.特别是,只有const_cast可用于抛弃(移除)常量或波动性.
1)相同类型的两个可能的多级指针可以在彼此之间进行转换,而不管每个级别的cv限定符.
我已经google了一下,并没有找到任何关于多级指针的简洁明了的定义.那么:多级指针究竟是什么?
(可能的面掌时刻)它只是指向指针的指针,或指向指针的指针,例如int **或int ***?
我知道如何删除已合并的所有本地分支.但是,我相信这是由于Github的新拉动请求压缩和合并功能,我发现自己留下了许多未合并的本地分支,但如果合并到master中将导致没有变化.
如何修剪这些本地分支,即那些未必合并但不会影响主分支(或更一般地说,当前分支)的本地分支?
java ×3
python ×2
branch ×1
c ×1
c# ×1
c++ ×1
cmake ×1
compilation ×1
const ×1
const-cast ×1
docker ×1
function ×1
gcc ×1
generics ×1
git ×1
github ×1
immutability ×1
include ×1
inheritance ×1
interactive ×1
keyboard ×1
macos ×1
numpy ×1
oop ×1
optimization ×1
performance ×1
pointers ×1
pthreads ×1
set ×1
squash ×1
user-input ×1