我试图使用ifstream打开一个命名管道,最终将数据写入它.
std::cout << "Opening " << name << std::endl;
std::ifstream manual_shutdown_file(name.c_str());
std::cout << "Opened " << name << std::endl;
Run Code Online (Sandbox Code Playgroud)
当我运行程序时,它在ifstream构造函数中阻塞.我看到打开控制台的"打开名称",但是没有出现打开的语句.
我知道我正在连接管道,因为如果我执行
$ echo foo > name
Run Code Online (Sandbox Code Playgroud)
从shell中,然后构造函数返回并打印Opened语句.即使我不想立即尝试读取数据,也没有办法打开管道,直到它有数据为止?
如果我有一个带有抽象方法的类:
abstract class Base {
abstract void foo();
}
Run Code Online (Sandbox Code Playgroud)
以及一个使用默认实现声明相同方法的接口:
interface Inter {
default void foo() {
System.out.println("foo!");
}
}
Run Code Online (Sandbox Code Playgroud)
我是否需要在实现/扩展两者的类中提供实现?
class Derived extends Base implements Inter {
}
Run Code Online (Sandbox Code Playgroud)
看起来这应该可以工作,但是我收到一个编译错误,该错误Derived不是抽象的并且不会覆盖抽象方法foo。
我猜测类的抽象方法比接口的默认方法“更重要”。
有什么好的方法可以使这项工作?
我的潜在的问题是,我有三级抽象类的层次结构(A和B延伸C,D并E延伸F,C和F延伸G),其将具有叶类的多个实现。在每组实现中,都有一些在基类中定义的通用方法被实现,所以我希望写
abstract class C extends G {
abstract void foo();
abstract void bar();
abstract void quz();
void baz() {
foo();
bar();
}
}
abstract class A …Run Code Online (Sandbox Code Playgroud) 我正在开发一个使用 maturin 构建的混合 Rust/Python 项目。我无法弄清楚如何指定可以通过 pip 安装的预发行版本。
我的 Cargo.toml 的开头是
[package]
version = "0.0.1-test.1"
Run Code Online (Sandbox Code Playgroud)
当我这样做时maturin build --release,它就创造了my_project-0.0.1_test.1-cp39-cp39-macosx_10_7_x86_64.whl。请注意,0.0.1-test.1在版本中更改为0.0.1_test.1wheel 文件的名称。(破折号变成了下划线。)
如果我将其发布到我的 Nexus 服务器并尝试将其安装在单独的项目中,pip则会出现错误:
$ pip install my_project==0.0.1_test.1
Looking in indexes: ...
ERROR: Could not find a version that satisfies the requirement my_project==0.0.1_test.1 (from versions: 0.0.1-test.1, 0.0.1.dev1)
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用破折号而不是下划线:
pip install py_mod_query_builder==0.0.1-test.1
Looking in indexes: ...
ERROR: Exception:
<stack trace>
pip._vendor.packaging.version.InvalidVersion: Invalid version: '0.0.1-test.1'
Run Code Online (Sandbox Code Playgroud)
如果我将 Cargo.toml 中的版本更改为 0.0.1_troy.1,则 Cargo 无法解析构建文件:
$ maturin build --release …Run Code Online (Sandbox Code Playgroud) 一个enum可以实现一个接口。某些值是否可以实现接口?我正在考虑的用例是一个标记接口,因此类似于以下内容:
interface Foo {}
interface Bar {}
enum Widgets {
FOO implements Foo,
BAR_1 implements Bar,
BAR_2 implements Bar
}
Run Code Online (Sandbox Code Playgroud)
这不能在 Java 1.8 下编译。我知道在内部,为 FOO 和 BAR_1 创建了单独的类,所以这似乎是可能的,但我可以很容易地看到标准不支持它。
应该工作的类似的东西是
interface Widgets;
enum Foo implements Widgets { FOO };
enum Bar implements Widgets { BAR_1, BAR_2 };
Run Code Online (Sandbox Code Playgroud)
这有一个缺点,我不能只做Widgets.values()并获得所有的小部件。
我已经gulp在全球范围内安装了
sudo npm install --global gulp-cli
Run Code Online (Sandbox Code Playgroud)
和本地
npm install --save-dev gulp
Run Code Online (Sandbox Code Playgroud)
/usr/local/bin/gulp存在,./node_modules/gulp并且./node_modules/gulp-cli存在。
当我尝试gulp在命令行上运行时,出现常见错误
$ gulp
[00:55:43] Local gulp not found in ~/dev/myProj/play-java-seed
[00:55:43] Try running: npm install gulp
Run Code Online (Sandbox Code Playgroud)
我注意到的一件事是,如果我gulp在某个随机目录 (~/foo) 中运行,则错误消息是在该目录中找不到本地 gulp。如果我从正确的目录 (~/dev/myProj/play-java-seed/ui) 运行它,那么错误会引用父目录。
错误信息中的目录中实际上没有安装gulp;它安装在较低的目录中。
/usr/local/bin/gulp 是具有以下内容的文件的符号链接:
#!/usr/bin/env node
'use strict';
require('../')();
Run Code Online (Sandbox Code Playgroud)
是..在该文件中是否正确?看起来很奇怪,但我之前没有仔细看过。
如果操作系统很重要,我运行的是 32 位 Ubuntu 16.04。
devDependencies在我的package.json包括gulp和gulp-cli
我正在尝试创建一个运行Neo4j服务器的docker镜像,并且不要求用户在初始访问时手动设置密码.
我有这个作为Dockerfile
FROM neo4j:3.2
ADD setPassword.sh .
RUN ./setPassword.sh
Run Code Online (Sandbox Code Playgroud)
运行此脚本
#!/bin/sh
set -e
# Start server
./bin/neo4j start
# Wait for it to start
while [ -z "$(grep 'Remote interface available' /var/lib/neo4j/logs/neo4j.log)" ]
do
echo Waiting for neo4j to start
sleep 1
done
# Set the password via REST
wget --header="Content-Type: application/json" \
--post-data='{"password": "newPassword"}' \
http://neo4j:neo4j@localhost:7474/user/neo4j/password
# Shut down the server
./bin/neo4j stop
tail -f /var/lib/neo4j/logs/neo4j.log &
sleep 10
# EOF
Run Code Online (Sandbox Code Playgroud)
该脚本启动Neo4j服务器,等待它启动,然后使用REST API设置密码.之后,它会关闭服务器并等待一段时间以确保它已关闭,以便内存中的任何内容都刷新到磁盘.
该脚本似乎运行没有错误,我能够创建一个新的图像.但是,当我运行图像并使用浏览器连接时,密码仍然是neo4j.
查看wget没有参数的输出:
BusyBox v1.26.2 …Run Code Online (Sandbox Code Playgroud) 我的代码有点像
trait Checker {
fn check(&self, value: &str) -> bool;
}
struct ShortChecker {}
impl Checker for ShortChecker {
fn check(&self, value: &str) -> bool {
value.len() < 5
}
}
struct PrefixChecker {
prefix: String,
}
impl Checker for PrefixChecker {
fn check(&self, value: &str) -> bool {
value.starts_with(self.prefix)
}
}
fn check(value: &str, which: &str) -> bool {
let checker = if which == "short" {
ShortChecker { }
} else if which == "prefix" {
PrefixChecker { …Run Code Online (Sandbox Code Playgroud) 如果我有一个复杂的地图类型,比如
type MyMap = Map[(String, String), List[Map[String, Int]]]
Run Code Online (Sandbox Code Playgroud)
有没有办法做一些事情,比如Map.Key获取密钥的类型(这里,(String, String))?
我希望标准答案是声明作为键和值类型的类,或者使用
type MyMapKey = (String, String)
type MyMapValue = List[Map[String, Int]]
type MyMap = Map[MyMapKey, MyMapValue]
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我MyMap在很多地方使用,但只在一个地方使用键和值类型来准备与地图一起使用的数据。因此,键和值类型感觉像是实现细节,不需要与 MyMap 处于同一级别的名称。
这是其他具有表达类型系统的语言的常见功能,因此我希望在 Scala 中找到它,但似乎不存在。
如果这很重要的话,我正在使用 Scala 3。