小编ant*_*one的帖子

声明一个不会在Scala中返回的函数

是否可以在Scala中声明“不返回”功能?即

def abort(): ! = {
    System.exit(1);
}
Run Code Online (Sandbox Code Playgroud)

!本例中的取自Rust,这意味着:进入此函数是单程旅行,我们将永远不会从中返回)

scala

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

imap"搜索所有"范围:所有文件夹/当前文件夹?

我试图通过搜索邮箱中的所有文件夹或仅搜索当前选定的文件夹来确定IMAP search(带有args :) "unseen all"命令是否有效?

即,在选择INBOX和发出search命令时,它没有找到任何新消息.

a select "INBOX"
* 383 EXISTS
* 0 RECENT
[...]
a search unseen all
* SEARCH
a OK Success

但是当我进入一个有新消息的文件夹时,它可以工作:

a select "inbox/test1/test2"
[...]
a uid search unseen all
* SEARCH 7 8 9

它检测到三条新消息,这是事实.所以我的问题是,这种行为是否正确?不应该search unseen all搜索所有文件夹中的新邮件?

directory search imap

7
推荐指数
1
解决办法
4949
查看次数

设计AT&T汇编语法的最初原因是什么?

在x86或amd64上使用汇编指令时,程序员可以使用"Intel"(即nasm编译器)或"AT&T"(即gas编译器)汇编语法."Intel"语法在Windows上更受欢迎,但"AT&T"在UNIX(类似)系统上更受欢迎.

但是英特尔和AMD手册,以及芯片创建者创建的手册都使用"英特尔"语法.

我想知道,"AT&T"语法设计背后的原始想法是什么?浮动处理器创建者使用的符号有什么好处?

x86 assembly intel att

7
推荐指数
1
解决办法
1255
查看次数

我可以使用什么特性进行数值类型的"模糊比较"?

我正在尝试在Rust中编写一个"模糊比较"函数.

这是一个例子:

fn fuzzy_cmp(a: f64, b: f64, tolerance: f64) -> bool {
    a >= b - tolerance && a <= b + tolerance
}
Run Code Online (Sandbox Code Playgroud)

我在将其转换为通用版本时遇到问题.是否存在对自然点和浮点数进行分组的特征,同时允许对它们执行算术运算?像这样的东西:

fn fuzzy_cmp<T: Numbers>(a: T, b: T, tolerance: T) -> bool {
    a >= b - tolerance && a <= b + tolerance
}
Run Code Online (Sandbox Code Playgroud)

我想在以下情况下使用此功能:

fuzzy_cmp(x, 20u64, 5u64)
fuzzy_cmp(y, 20f64, 5f64)
// ... etc
Run Code Online (Sandbox Code Playgroud)

我已经尝试了Ord特性,但它不起作用:

28:23 error: binary operation `-` cannot be applied to type `T`
a >= b - tolerance && a <= …
Run Code Online (Sandbox Code Playgroud)

rust

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

在Linux上以原子方式交换两个文件的内容

我有两个文件,A并且B,每一个都有自己的内容.

我想交换这两个文件,所以A会成为B,B并将成为A.但我想保证,没有其他进程会发现这两个文件处于不一致的状态,也没有任何进程会发现任何这些文件丢失,即使是很短的时间.因此,作为一项副业,我还要保证,如果在运营期间出现任何问题,任何事情都不会改变(有点像我猜的交易).

在OS X上有一个exchangedata()函数,所以我想我正在寻找Linux的等价物,或者至少是一个等效的原子文件交换方法.

linux libc

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

使用模板在 size_t 和 int 之间进行隐式类型转换

我有这个编译时序列生成类(取自此处,并对其进行了一些修改):

#include <cstddef>

template <int...>
struct sequence {};

template <int... Ns>
struct generator;

template <std::size_t Count, int... Ns>  // XXX (read below)
struct generator<Count, Ns...> {
    using type = typename generator<Count - 1, Count - 1, Ns...>::type;
};

template <int... Ns>
struct generator<0, Ns...> {
    using type = sequence<Ns...>;
};

template <std::size_t N>
using sequence_t = typename generator<N>::type;

int main() {
    sequence_t<5> a;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这在 Visual Studio 下编译得很好(即使使用/permissive-开关)。但在 GCC 下会抛出错误:

#include <cstddef>

template <int...> …
Run Code Online (Sandbox Code Playgroud)

c++ template-specialization language-lawyer implicit-conversion variadic-templates

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

在Qt5中绘制大量独立角色的最佳方法是什么?

我正在编写一个显示大量文本的应用程序.这不是单词和句子,它是在CP437字符集中显示的二进制数据.目前的形式:

我当前应用程序的截图

我在绘制这些角色时遇到了问题.我需要逐个绘制每个角色,因为后来我想应用不同的颜色.这些角色也应该具有透明背景,因为稍后我想在背景中绘制具有不同颜色的部分和范围(根据某些标准对这些角色进行分组).

该应用程序同时支持多个打开的文件,但是当打开多个文件时,快速i7上的绘图开始变得明显,因此可能写得很糟糕.

在Qt5中绘制此类数据的最佳方法是什么?我应该将字符预先渲染到位图并从那里开始,或者实际上可以通过使用普通的Qt函数绘制文本来绘制大量字符吗?

编辑:我正在使用一个正常的QFrame小部件,它paintEvent使用QPainter.这是一种错误的做法吗?我已经阅读了一些文档QGraphicsScene,我记得它最适用于窗口小部件需要对它绘制的对象进行一些控制的情况.我不需要任何控制我画的东西; 我只需要绘制它,就是这样.我画完之后,我不会引用任何特定的字符.

小部件有2000行,所以我不会粘贴整个代码,但目前我的绘图方法是这样的:

  • 首先,创建一个cache包含256个条目的table(),将迭代器计数器放到i变量中,
  • 对于每个条目,创建一个QStaticText对象,其中包含有关由i变量中的ASCII代码标识的字符的绘图信息,
  • 后来,在绘图功能,对于输入流(即,从文件)中的每个字节,绘制使用所述数据QStaticText从所述cache的表.因此,要绘制ASCII字符0x7A,我将从表中的QStaticText索引0x7acache查找,并将此QStaticText对象提供给QPainter对象.

我也尝试了一种不同的方法,在一次QPainter::drawText调用中渲染整行,实际上它更快,但我已经失去了用不同颜色着色每个角色的可能性.我想有这种可能性.

user-interface qt draw

3
推荐指数
1
解决办法
790
查看次数

创建映射操作,以便每个输入元素生成一个或多个输出元素?

最近我试图弄清楚如何在Haskell中进行一些编程.

我正在尝试做一些简单的操作.现在我陷入了这个例子中的操作:

input = [1,2,3,4]
output = [1,2,2,3,3,3,4,4,4,4]
Run Code Online (Sandbox Code Playgroud)

即,对于每个元件xinput,产生x的元件xoutput.因此,对于1输入中的元素,追加[1]到输出.然后,对于2输入中的元素,将元素追加[2,2]到输出.然后,对于元素3,追加[3,3,3]等.该算法应仅适用于标准数字.

我知道这很容易,并且在"正常"命令式编程中执行它是微不足道的,但是由于Haskell的函数是无状态的,我在如何处理它时遇到了问题.

任何人都可以给我一些暗示,一个绝对的Haskell初学者怎么能应付这个?

haskell

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

Clojure的-main函数没有完全执行

这是预期的行为,还是我的Clojure安装问题(我在Windows和Linux上检查它)?

我有一个简单的项目,用lein new app testfor.这是代码src/testfor/core.clj:

(ns testfor.core
    (:gen-class))

(defn -main [& args]
    (println "hello")
    (for [x [1 2 3]]
        (println x)))
Run Code Online (Sandbox Code Playgroud)

当我从REPL 运行lein repl并调用时(-main),输出是这样的:

testfor.core=> (-main)
hello
1
2
3
Run Code Online (Sandbox Code Playgroud)

但后来我运行应用程序lein run,或者lein uberjar运行生成的JAR文件,输出是这样的:

$ lein run
hello
Run Code Online (Sandbox Code Playgroud)

所以,它以某种方式不运行for循环.

我在这里做错了吗?

clojure

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