小编Zhr*_*hro的帖子

可以在较大的表达式中使用可选的ifPresent()来缓解对get()的调用吗?

为了避免调用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()在可能的情况下避免错过可能未经检查的异常.

java lambda optional java-8

8
推荐指数
2
解决办法
339
查看次数

写入文件描述符3而不写入磁盘?

有没有办法与文件描述符交互而无需在磁盘上打开文件?

如果没有首先将文件分配给fd3,这将无法工作:

echo a >&3
Run Code Online (Sandbox Code Playgroud)

bash shell file-descriptor

6
推荐指数
1
解决办法
3150
查看次数

如何确定 X 正在侦听哪些端口?

我的用例是我通过 ssh 运行 nx 并且本地代理通过隧道连接到远程主机。因为它是隧道的,所以我告诉 nx 连接到 localhost:port。问题是我需要执行 X 身份验证,如果我意外访问本地 X 服务器而不是远程服务器,我会收到身份验证错误。

如何确定本地 X 服务器正在侦听的端口,以便在设置隧道时避免它?

我目前的解决方法是避免与任何已经有另一个应用程序监听的本地端口建立隧道。

x11 ssh x11-forwarding

6
推荐指数
1
解决办法
2万
查看次数

如何在没有 Home/End 键和 Fn 键的键盘上导航代码?

我正在寻找各种笔记本电脑,以便在旅行时进行编程,我发现了这款:Asus Flip Chromebook:

华硕翻盖 Chromebook

已经很难找到带有 Del/PgUp/PgDn/End 行的 15 英寸以下笔记本电脑了,我在编码时经常使用这些行,但大多数笔记本电脑至少有一个“Fn”键来从箭头键获取大部分功能。但是这个笔记本电脑甚至没有这个。

据我所知,这台笔记本电脑是 Chromebook,并不是针对程序员的,但如果有人想使用这样的笔记本电脑进行编程,如何设置环境和 IDE 来解决这些丢失的密钥?

例如,要选择当前行,如果我在末尾,则输入 Shift+Home;如果在下面,则输入 Home+Shift+End,等等。

这种键盘有哪些解决方案和不同的工作流程?

keyboard ergonomics mobile keyboard-shortcuts

6
推荐指数
1
解决办法
2万
查看次数

如何在不嵌套Optional#ifPresent()的情况下将lambda与所有在内部范围内可用的可选值链接在一起?

这是我另一个问题的分支:如何在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()

java lambda optional

5
推荐指数
1
解决办法
219
查看次数

为什么子 shell 中的 stderr 没有被抑制或重定向?

我知道子 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 stderr subshell

5
推荐指数
1
解决办法
3611
查看次数

在bash中使用回车符进行字符串比较

为什么下面的代码在 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)

string bash shell sh

4
推荐指数
1
解决办法
9709
查看次数

为什么这个对象被认为是右值?

为什么我传递给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)

c++ rvalue

4
推荐指数
1
解决办法
81
查看次数

无法将const应用于typedef引用

如果我使用相同类型的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&编译好.

c++ const const-correctness

4
推荐指数
1
解决办法
1445
查看次数

从调用线程运行 CompletableFuture.thenAccept?

我想调用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与调用线程同时运行?

java concurrency multithreading

4
推荐指数
1
解决办法
4271
查看次数

移出范围后,指向__FILE__的指针是否仍然有效?

如果我想传递__FILE__给一个对象,我是否需要复制该字符串,或者我可以将其指针存储为const char*

我猜我需要制作一份副本,因为我认为它一旦超出范围就会自由.

指针是否__FILE__提供任何保证?

c++ debugging

4
推荐指数
1
解决办法
341
查看次数

为什么放'和'失败?

有人可以解释为什么这会一直失败吗?

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)

代码似乎执行正常,但我似乎无法使用包含大括号的字符串.

tcl

2
推荐指数
2
解决办法
167
查看次数

在字符串中搜索 UTF-8 代码点时有什么注意事项吗?

如果我有一些字符串要在 UTF-8 中搜索,另一个要搜索,也在 UTF-8 中搜索,对代码点进行直接比较搜索以查明匹配字符有什么注意事项吗?

以 UTF-8 的工作方式,是否有可能得到误报?

我已经阅读了很多关于 UTF-8 有多棒的文档,但是我无法形成证据来回答这个问题。

如果我向前搜索,那么我可以跳过代码点的长度;但它是反向走绳子,这让我很担心。

不是向后走直到我到达代码点的开头然后从该地址进行内存比较,而是简单地沿着每个字节向后走直到我得到与搜索字符串的完全匹配是否安全?

c++ unicode encoding utf-8 unicode-string

2
推荐指数
1
解决办法
202
查看次数