小编Mat*_*ner的帖子

为什么我不能在以下Go代码中使用空白标识符?

for _, arg := range flag.Args() {
    go func() {
        path.Walk(arg, dupes, walkerrs)
        walkend <- true
    }()
}
for _ := range flag.Args() {
    if !<-walkend {
        os.Exit(1)
    }
}
Run Code Online (Sandbox Code Playgroud)

第二次使用_给出了这个错误:no new variables on left side of :=.我做错了什么?

go

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

将指针传递给C中的私有结构?

我如何传递指向具有私有定义的结构的指针,而不使用指针类型struct

例如,这有效:

typedef struct Handle {
    Ino ino;
} Handle;

bool handle_open(Handle **);
Run Code Online (Sandbox Code Playgroud)

但是如果我将struct定义移动到源文件中,则强制使用其他源文件struct Handle *,而不是Handle *.

c gcc struct typedef forward-declaration

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

哪些C++领域对C程序员最有用?

我不喜欢C++,我喜欢C,但我发现我必须像STL一样了解C++,做一些类似C的C++.

至少我应该对C++有什么了解?(语言规范,API,libs等)

c c++

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

键入的常量声明列表

我希望创建一个具有以下属性的"类似枚举"的常量列表:

  1. 每个标识符的值是顺序的,有一些间隙.(我相信iota和空白标识符在这方面有帮助).
  2. 标识符对模块是私有的.
  3. 常量只能与相同类型的其他常量进行比较.

枚举是基于enum fuse_opcodeFUSE.这是我正在尝试完成的一些代码(也是非常错误的):

const Opcode (
    _ = iota // skip 0
    lookupOp
    forgetOp
    getattrOp
    setattrOp
    readlinkOp
    symlinkOp // 6
    _ // skip 7
    mknodOp // 8
    // et cetera ad nauseam
)
Run Code Online (Sandbox Code Playgroud)

enums constants go iota

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

T和*T的方法集

Golang语言规范状态:

任何其他类型T的方法集由具有接收器类型的所有方法组成T.设置相应的指针型的方法*T是该组的与接收机的所有方法*TT(即,它也包含的方法集T).

为什么是这样?为什么接收方法T属于方法集*T但反之亦然?

methods interface go receiver

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

检查测试编译而不运行它们或创建二进制文件

如何使用Go来检查我的测试是否在不创建任何二进制文件或执行测试的情况下编译?

测试相当于go build ./...,这样做但忽略了测试.

unit-testing go

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

要求类型参数是结构

我有一个指定了类型参数的函数,T我假设它是一个结构体。然后我将一个迭代器收集T到一个 Vec. 中:

pub fn get_matches<T>(
    &self,
) -> Vec< T> 
{
    ...
    some_iter.
        .map(|(k, _v)| T{key:(**k).to_string(), hits: 0})
        .collect()
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误

96 |             .map(|(k, _v)| T{key:(**k).to_string(), hits: 0})
   |                            ^ not a struct, variant or union type
Run Code Online (Sandbox Code Playgroud)

我试过让返回类型成为类型参数,但我无法弄清楚如何获取Vec的元素类型并实例化它。我只想生成特定形状的元素(即带有key: string, 和hits: usize)并返回调用者期望的任何容器。

rust

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

意外的对象分配

class TrafficData(object):
    def __init__(self):
        self.__data = {}
    def __getitem__(self, epoch):
        if not isinstance(epoch, int):
            raise TypeError()
        return self.__data.setdefault(epoch, ProcessTraffic())
    def __iadd__(self, other):
        for epoch, traffic in other.iteritems():

            # these work
            #existing = self[epoch]
            #existing += traffic

            # this does not
            self[epoch] += traffic # here the exception is thrown

        return self
Run Code Online (Sandbox Code Playgroud)

在上面修剪过的代码中,我不期望一个项目分配,但显然在标记的行上发生了一个,并抛出以下异常:

  File "nethogs2.py", line 130, in __iadd__
    self[epoch] += traffic
TypeError: 'TrafficData' object does not support item assignment
Run Code Online (Sandbox Code Playgroud)

但是,如果我改为使用前面两条注释掉的行,则不会抛出任何异常.

在我看来,2应该以相同的方式表现.self[epoch]返回对对象的引用,并通过该对象对其进行修改__iadd__.我在这里误解了什么?我经常在使用词典时遇到这个问题.

Update0

值得指出的是,self.__data已经__iadd__ …

python dictionary variable-assignment

0
推荐指数
1
解决办法
186
查看次数

__thread上的夹板barf,它是C99的一部分

运行夹板

matt@stanley:~/cpfs$ splint -paramuse +gnuextensions cpfs.c
Run Code Online (Sandbox Code Playgroud)

暂停此行:

__thread int cpfs_errno;
Run Code Online (Sandbox Code Playgroud)

解析错误:

cpfs.c:127:13: Parse Error: Non-function declaration: __thread :
               int. (For help on parse errors, see splint -help parseerrors.)
*** Cannot continue.

检查文档和漱口水没有提到__thread.然而,这__thread是C99规范的一部分,据称Splint支持(插入引用).

这里发生了什么?如何识别夹板__thread

c linux gcc splint thread-local-storage

0
推荐指数
1
解决办法
524
查看次数

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