小编Mat*_*ner的帖子

获取当前正在执行的测试测试的名称?

在Go中,如何获取当前正在执行的测试的名称,当前测试的函数名称Test,而不是手动传递它?

go

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

由于遍历的目录不可执行,获取权限被拒绝的原因

我有/a/b一个用户可读的文件A。但/a不提供由 的可执行权限A,因此路径/a/b无法遍历/a。对于任意长的路径,由于用户无法访问中间路径,我将如何确定无法访问给定路径的原因?

linux permissions file-permissions directory-traversal

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

如何防止将类型用作地图键?

我有一个可以用作地图键的类型,但我想防止这种情况发生.我假设如果类型包含私有成员,则无法从其他包中进行,但这似乎无论如何都可行.使类型无法用作地图键的最佳方法是什么?

type MyType struct {
    A *A
    b b

    preventUseAsKey ?
}
Run Code Online (Sandbox Code Playgroud)

struct dictionary key unique go

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

当 From<T> for U 可用时,将 Vec<T> 转换为 Vec<U>

我已经实施From<T> for U,并希望我可以Vec<U>::extend使用Vec<T>. 相反,我得到expected T, got U. 解决这个问题的最惯用的方法是什么?

struct U;
struct T;

impl From<T> for U {
    fn from(_other: T) -> Self {
        U
    }
}

fn main() {
    let mut v: Vec<U> = Vec::new();
    let other: Vec<T> = Vec::new();

    v.extend(other.into_iter());
}
Run Code Online (Sandbox Code Playgroud)
error[E0271]: type mismatch resolving `<std::vec::IntoIter<T> as std::iter::IntoIterator>::Item == U`
  --> src/main.rs:14:7
   |
14 |     v.extend(other.into_iter());
   |       ^^^^^^ expected struct `T`, found struct `U`
   |
   = note: expected type `T`
              found …
Run Code Online (Sandbox Code Playgroud)

type-conversion traits rust

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

fclose()/ pclose()可能会阻塞某些文件指针

fclose()dup()其文件描述符块之后调用此处直到子进程结束(可能是因为流已经结束).

FILE *f = popen("./output", "r");
int d = dup(fileno(f));
fclose(f);
Run Code Online (Sandbox Code Playgroud)

但是通过手动进行pipe(),fork(),execvp()popen(),然后dup()荷兰国际集团管道的读取文件描述符,关闭原来的不阻塞.

int p[2];
pipe(p);
switch (fork()) {
    case 0: {
        char *argv[] = {"./output", NULL};
        close(p[0]);
        dup2(p[1], 1);
        execvp(*argv, argv);
    }
    default: {
        close(p[1]);
        int d = dup(p[0]);
        close(p[0]);
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况,如何关闭FILE *返回的popen()并在其位置使用文件描述符?

更新:

我知道文档说要使用pclose(),但是fclose()块也是如此.此外,我在glibc代码中搜索,并且pclose()只是调用fclose().该行为是相同的,是否fclose()pclose()使用.

c unix stdio popen fclose

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

启用GtkFileChooserDialog以选择文件或文件夹

使用GTK +的GtkFileChooserDialog,我如何允许用户选择文件或文件夹(两者都在这里有效).可用行动是互斥的.

gtk ubuntu pygtk filechooser

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

Python列表,查找对象名称,效率建议

假设我有以下对象:

class Foo(object):
  def __init__(self, name=None):
    self.name = name

  def __repr__(self):
    return self.name
Run Code Online (Sandbox Code Playgroud)

以及包含多个实例的列表,例如:

list = [Foo(name='alice'), Foo(name='bob'), Foo(name='charlie')]
Run Code Online (Sandbox Code Playgroud)

如果我想找到一个具有给定名称的对象,我可以使用以下内容:

def get_by_name(name, list):
  return [foo for foo in list if foo.name == name][-1]
Run Code Online (Sandbox Code Playgroud)

这显然意味着:

print get_by_name('alice', list)
>> alice
Run Code Online (Sandbox Code Playgroud)

但是,是否有更有效的数据结构或方法来检索此类对象?实际上,对象名称仅在运行时已知,并且理论上可以在对象的整个生命周期中发生变化.

有什么建议?

更新:

感谢Matt Joiners的回答,我更新了它以支持多个具有相同名称的Foo:

class Foo(object):
    _all_names = {}    
    def __init__(self, name=None):
        self._name = None
        self.name = name        
    @property
    def name(self):
        return self._name        
    @name.setter
    def name(self, name):
        if self._name is not None:
            self._all_names[self._name].remove(self)
        self._name = name
        if name …
Run Code Online (Sandbox Code Playgroud)

python algorithm performance list-comprehension list

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

仅更改C++模板中某个类型的部分

抛开目的和疯狂,有没有办法在C++中实现这一目标?

template <typename P>
void Q void_cast(P Q *p) const
{
    return static_cast<P Q *>(p);
}
Run Code Online (Sandbox Code Playgroud)

我试图有效的指针转换为void指针类型,同时保持任何const,restrict和其他预选赛(记Q).

我的印象是C++标准库中有东西(或者不太希望在Boost中),它允许你"调整"类型的属性,比说const_cast或者更精细的粒度static_cast.

c++ templates type-conversion c++11

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

将数据量/容量格式化为字符串

许多程序中的常见任务是将字节数(例如来自驱动器容量或文件大小)转换为更易于阅读的形式.将150000000000个字节视为"150 GB"或"139.7 GiB"更易读.

是否有任何库包含执行这些转换的功能?在Python?在C?在伪代码?是否有关于"最易读"形式的最佳实践,例如重要字符数,精度等?

c python readability stringification

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

Boost C++宏参数计数错误

在下面的代码中:

BOOST_FOREACH(std::pair<PID, bool> &itval, completedEs_) {
    allCompleted &= it->second;
}
Run Code Online (Sandbox Code Playgroud)

我收到这个错误:

错误:宏"BOOST_FOREACH"传递了3个参数,但只有2个

我只传递了两个论点,发生了什么?

c++ macros foreach boost boost-foreach

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