为了避免调用get()哪个可以抛出异常:
if (a.isPresent())
list.add(a.get());
Run Code Online (Sandbox Code Playgroud)
我可以用以下代码替换此表达式
a.ifPresent(list::add);
Run Code Online (Sandbox Code Playgroud)
但是如果我需要执行更大的表达式,例如:
if (a.isPresent() && b && c)
list.add(a.get());
Run Code Online (Sandbox Code Playgroud)
是否仍然可以使用lambda表单来缓解对此的调用get()?
我的用例是尽可能避免get()在可能的情况下避免错过可能未经检查的异常.
有没有办法与文件描述符交互而无需在磁盘上打开文件?
如果没有首先将文件分配给fd3,这将无法工作:
echo a >&3
Run Code Online (Sandbox Code Playgroud) 我的用例是我通过 ssh 运行 nx 并且本地代理通过隧道连接到远程主机。因为它是隧道的,所以我告诉 nx 连接到 localhost:port。问题是我需要执行 X 身份验证,如果我意外访问本地 X 服务器而不是远程服务器,我会收到身份验证错误。
如何确定本地 X 服务器正在侦听的端口,以便在设置隧道时避免它?
我目前的解决方法是避免与任何已经有另一个应用程序监听的本地端口建立隧道。
我正在寻找各种笔记本电脑,以便在旅行时进行编程,我发现了这款:Asus Flip Chromebook:
已经很难找到带有 Del/PgUp/PgDn/End 行的 15 英寸以下笔记本电脑了,我在编码时经常使用这些行,但大多数笔记本电脑至少有一个“Fn”键来从箭头键获取大部分功能。但是这个笔记本电脑甚至没有这个。
据我所知,这台笔记本电脑是 Chromebook,并不是针对程序员的,但如果有人想使用这样的笔记本电脑进行编程,如何设置环境和 IDE 来解决这些丢失的密钥?
例如,要选择当前行,如果我在末尾,则输入 Shift+Home;如果在下面,则输入 Home+Shift+End,等等。
这种键盘有哪些解决方案和不同的工作流程?
这是我另一个问题的分支:如何在lambda中链接Optional#ifPresent()而不进行嵌套?
但是,现在的问题是如何提供一个lambda解决方案,其中所有可选值都在最内部作用域中可用:
B b = procA().flatMap(this::procB).orElseThrow(SomeException::new);
// Value from procA() is not available.
Run Code Online (Sandbox Code Playgroud)
我的原始代码是:
void SomeMethod() {
procA().ifPresent(a -> {
procB(a).ifPresent(b -> {
// Do something with a and b
return;
});
});
throw new SomeException();
}
Run Code Online (Sandbox Code Playgroud)
我了解return最内在的范围是错误的。新flatMap示例说明了正确的行为。
我使用ifPresent()而不是get()避免潜在的运行时异常,在这种情况下,我可能无法检查是否为optional的值isPresent()。
我知道子 shell 的标准输出从调用者的输出中被抑制:
a=$(echo 123)
echo a:$a
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,输出:
a:123
Run Code Online (Sandbox Code Playgroud)
但是为什么 stderr 不在子 shell 中被抑制呢?
a=$(>&2 echo 123)
Run Code Online (Sandbox Code Playgroud)
预期输出:
(没有什么)
实际输出:
123
Run Code Online (Sandbox Code Playgroud)
这是一个测试,其中 stderr 应重定向到 stdout 并捕获到变量a:
a=$(>&2 echo 123 2>&1)
echo a:$a
Run Code Online (Sandbox Code Playgroud)
预期输出:
a:123
Run Code Online (Sandbox Code Playgroud)
实际输出:
123
a:
Run Code Online (Sandbox Code Playgroud) 为什么下面的代码在 bash 中失败?请注意,我正在尝试执行更复杂的比较,例如“somestring\r”;这只是一个简化的例子。
我可以确认回车符“ascii 13”正在进入脚本。但我无法将其与常规字符串比较进行比较。
积极匹配的预期结果是“1”。
命令行:
echo -e "\r" | ./test.sh
Run Code Online (Sandbox Code Playgroud)
脚本:
ord() {
printf '%d' "'$1"
}
read a
echo "1st char: $(ord ${a:0:1})"
left="${a:0:1}"
if [ "$left" = "\r" ]; then
echo 1
fi
exit 0
Run Code Online (Sandbox Code Playgroud) 为什么我传递给ClassA构造函数的对象被认为是一个右值(临时)?我知道将参数设置为const将使错误消失但我想了解发生了什么.
这种行为适用于函数调用,但不适用于构造函数?
#include <iostream>
using namespace std;
class ClassA {
public:
ClassA() {}
ClassA(ClassA&) {}
};
void f(ClassA&) {}
int main() {
ClassA a;
// Invalid initialization of non-const reference of type 'ClassA&' from an
// rvalue of type 'ClassA'
ClassA b = ClassA(a);
// Works fine
f(a);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 如果我使用相同类型的typedef,则以下代码在应用于const返回值引用时会起作用,value_type&但会出现错误.
举个例子:
class T {
};
class A {
public:
typedef T value_type;
typedef value_type& reference;
// Not working
const reference operator*() const;
// But this works?
//const value_type& operator*() const;
};
// Error!
const typename A::reference A::operator*() const {
}
int main() {
return 0;
}
Run Code Online (Sandbox Code Playgroud)
g ++会出错:
'const' qualifiers cannot be applied
Run Code Online (Sandbox Code Playgroud)
我的实际代码使用模板,但我删除了示例和替换类T.这与错误无关.
我不明白为什么这不起作用如果指定value_type&编译好.
我想调用CompletableFuture.supplyAsync()将阻塞任务委托给另一个线程。一旦该任务完成,我希望CompletableFuture.thenAccept消费者在调用线程的上下文中运行。
例如:
// Thread 1
CompletableFuture.supplyAsync(() -> {
// Thread 2
return BlockingMethod();
}).thenAccept((
Object r) -> {
// Thread 1
});
Run Code Online (Sandbox Code Playgroud)
以下代码建议CompletableFuture.thenAccept在其自己的线程中运行;可能与CompletableFuture.supplyAsync运行时获得相同线程 ID 的池相同:
System.out.println("Sync thread supply " + Thread.currentThread().getId());
CompletableFuture.supplyAsync(() -> {
System.out.println("Async thread " + Thread.currentThread().getId());
try {
Thread.sleep(2000);
}
catch (Exception e) {
e.printStackTrace();
}
return true;
}).thenAccept((
Boolean r) -> {
System.out.println("Sync thread consume " + Thread.currentThread().getId());
});
Thread.sleep(3000);
Run Code Online (Sandbox Code Playgroud)
是否可以CompletableFuture.thenAccept与调用线程同时运行?
如果我想传递__FILE__给一个对象,我是否需要复制该字符串,或者我可以将其指针存储为const char*?
我猜我需要制作一份副本,因为我认为它一旦超出范围就会自由.
指针是否__FILE__提供任何保证?
有人可以解释为什么这会一直失败吗?
set hostname ""
if {$hostname eq ""} {
puts "Usage: host [-u username] [-p password] [-f]"
exit 5
}
if {[string length $hostname] == 0} {
puts "Usage: host [-u username] [-p password] [-f]"
exit 5
}
if {[string equal $hostname ""]} {
puts "Usage: host [-u username] [-p password] [-f]"
exit 5
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
invalid command name "-u"
while executing
"-u username"
invoked from within
"if {$s eq ""} {puts "Usage: host [-u username] [-p password] [-f]"}"
Run Code Online (Sandbox Code Playgroud)
代码似乎执行正常,但我似乎无法使用包含大括号的字符串.
如果我有一些字符串要在 UTF-8 中搜索,另一个要搜索,也在 UTF-8 中搜索,对代码点进行直接比较搜索以查明匹配字符有什么注意事项吗?
以 UTF-8 的工作方式,是否有可能得到误报?
我已经阅读了很多关于 UTF-8 有多棒的文档,但是我无法形成证据来回答这个问题。
如果我向前搜索,那么我可以跳过代码点的长度;但它是反向走绳子,这让我很担心。
不是向后走直到我到达代码点的开头然后从该地址进行内存比较,而是简单地沿着每个字节向后走直到我得到与搜索字符串的完全匹配是否安全?