小编Iak*_*dov的帖子

名称未在具有多个循环的列表推导中定义

我正在尝试解压缩复杂的字典,并且我正在NameError使用多个循环获取列表理解表达式:

a={
  1: [{'n': 1}, {'n': 2}],
  2: [{'n': 3}, {'n': 4}],
  3: [{'n': 5}],
}
good = [1,2]
print [r['n'] for r in a[g] for g in good]
# NameError: name 'g' is not defined
Run Code Online (Sandbox Code Playgroud)

python list-comprehension

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

使用cgo将函数指针传递给C代码

从Go v1.6开始,cgo改变了将指针传递给C代码golang/go#12416的规则.从wiki的C代码调用动态Go回调的示例不再起作用.

package main

import (
    "fmt"
    "unsafe"
)

/*
   extern void go_callback_int(void* foo, int p1);

   // normally you will have to define function or variables
   // in another separate C file to avoid the multiple definition
   // errors, however, using "static inline" is a nice workaround
   // for simple functions like this one.
   static inline void CallMyFunction(void* pfoo) {
       go_callback_int(pfoo, 5);
       }
*/
import "C"

//export go_callback_int
func go_callback_int(pfoo unsafe.Pointer, p1 C.int) {
    foo := *(*func(C.int))(pfoo)
    foo(p1) …
Run Code Online (Sandbox Code Playgroud)

go cgo

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

为什么编译器假定if let的值应为`()`?

我有以下代码:

use std::collections::HashSet;

fn translate() -> Option<String> {
    None
}

fn main() {
    let mut found = HashSet::new();

    if let Some(tr) = translate() {
        found.insert(tr);
    }
}
Run Code Online (Sandbox Code Playgroud)

它正常工作,但是当我在之后删除分号时found.insert(tr),出现编译器错误:

use std::collections::HashSet;

fn translate() -> Option<String> {
    None
}

fn main() {
    let mut found = HashSet::new();

    if let Some(tr) = translate() {
        found.insert(tr);
    }
}
Run Code Online (Sandbox Code Playgroud)

该代码位于何处或它是否是该函数的最后一个表达式都无关紧要。

为什么编译器假定花括号内的表达式应该是()

rust

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

标签 统计

cgo ×1

go ×1

list-comprehension ×1

python ×1

rust ×1