小编ide*_*n42的帖子

如何在Python脚本中提取变量而不执行它?

在某些情况下,从 Python 脚本(可能来自不受信任的来源)读取数据并从中提取值很有用。

尽管在大多数情况下 XML/JSON/YAML/TOML 等格式更适合,但有时这样做很有用。

如何从 Python 脚本中提取变量名称和值而不执行它?
(假设值构造不包含其创建的代码执行)

python-3.x

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

short/char上的'〜'运算符隐式转换为int(C/gcc)

随着gcc的-Wconversion警告,看起来chars和short被隐式转换为int.

#include<stdio.h>

#pragma GCC diagnostic warn "-Wconversion"

void main(void)
{
    short i = 1;
    short j = 1;
    short k = j & ~i;
    printf("value %d\n", j);
}
Run Code Online (Sandbox Code Playgroud)

给出以下警告,

test.c: In function 'main':
test.c:9:15: warning: conversion to 'short int' from 'int' may alter its value [-Wconversion]
   short k = j & ~i;
               ^
Run Code Online (Sandbox Code Playgroud)

回到一个简短的静音警告,short k = j & (short)~i;但这有点奇怪添加变量类型已经匹配的强制转换.

我调查了是否进一步并(unsigned short)~(unsigned short)0导致了结果0xffff.
凡为~(unsigned short)0的结果0xffffffff

任何人都可以推荐一个处理这些警告的好方法吗?
除了禁用-Wconversion.

c casting

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

是否可以声明没有明确长度的数组?

在 Rust 中,您可以声明一个具有特定大小的数组:

struct Vector(f64, f64);

fn main() {
    let points: [Vector; 3] = [
        Vector(1.0, 1.0), 
        Vector(5.0, 5.0), 
        Vector(0.0, 0.0),
    ];

    println!("Length is {}\n", points.len());
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让长度(3在本例中)是隐式的,因为数组中有 3 个元素。与 C 中的操作类似:

struct Vector(f64, f64);

fn main() {
    let points: [Vector; 3] = [
        Vector(1.0, 1.0), 
        Vector(5.0, 5.0), 
        Vector(0.0, 0.0),
    ];

    println!("Length is {}\n", points.len());
}
Run Code Online (Sandbox Code Playgroud)

请注意,这绝对是一个初学者问题。

arrays rust

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

平方函数和直接调用Rust中的powi(2)之间是否存在性能差异?

在Rust中,你可以写(x * x)x.powi(2).

是否有任何理由/反对包装(x * x) (除了可读性和个人偏好)到Rust中的函数/宏,或者这相当于使用x.powi(2)

(其中常数2x.powi(2)被折叠并转换成x * x)

rust

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

如何使用整数类型(除了usize)索引向量,而不进行显式转换?

有时索引需要紧密打包(例如网格几何),其中有用的是存储索引u32而不是usize.

有没有办法在Rust中索引向量而不必usize每次都显式地转换为?例如:

vector[some_u32 as usize];
Run Code Online (Sandbox Code Playgroud)

在单个实例中进行转换不是问题,在经常需要时它只是单调乏味.

有没有办法避免在这里施放?

casting rust

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

是否可以在不添加小数点的情况下将int文字强制转换为Rust中的浮点数?

我有一些从另一种语言格式化的测试数据.数据是一个浮点数组,但有些成员会错过小数点.

[0, 0], [0, 1], [1, 0.5], ... (100多个项目).

有没有办法让Rust定义一个f64/ f32不必将小数点添加到每个值的数组?

floating-point literals rust

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

如何通过调用Rust中的方法来避免重复重新声明变量?

Into在Rust中使用多个参数,并希望避免许多任务和愚蠢的错误.

pub fn my_fancy_function<T>(v: T, u: T, i: T, l: T, j: T)
    where T: Into<MyStruct>
{
    let v = v.into();
    let u = u.into();
    let i = l.into(); // Oops, I transposed these!
    let l = i.into();
    let j = j.into();
    // some code
}
Run Code Online (Sandbox Code Playgroud)

有没有办法避免写出大量的作业?宏可能能够这样做:

expand_into!(v, u, i, l, j);
Run Code Online (Sandbox Code Playgroud)

这个方法没有什么特别之处into(),它只是一个例子,你可能经常在一个函数的开头重新声明许多参数,这种参数可以很容易地重复删除.

variable-assignment rust

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

如何在'选项'中多次访问向量?

如何在没有Rust移动第一次访问的情况下访问选项中的向量?

fn maybe_push(v_option: Option<&mut Vec<usize>>) -> usize {
    let mut c = 0;
    if let Some(v) = v_option {
        for i in 0..10 {
            v.push(i);
            c += i;
        }
    } else {
        for i in 0..10 {
            c += i;
        }
    }

    // second access, fails
    if let Some(v) = v_option {
        for i in 10..20 {
            v.push(i);
            c += i;
        }
    } else {
        for i in 10..20 {
            c += i;
        }
    }

    return c;
}


fn main() …
Run Code Online (Sandbox Code Playgroud)

rust borrow-checker

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

如果我不关心特定的编码,如何将u8切片打印为文本?

u8在Rust中打印数组时,println!("{:?}", some_u8_slice);打印数值(应该如此).

在不假设任何特定编码的情况下,将字符格式化为字符串的最直接方法是什么.

像迭代字节字符串并将每个字符写入stdout (没有那么多麻烦)的东西.

可以使用Rusts来完成format!吗?

否则,打印u8切片最方便的方法是什么?

arrays string rust

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

可以使用'Into'将'&str'或'&String'传递给Rust中的函数?

在Rust中,函数可能需要Into<String>:

fn get_by_key<S: Into<String>>(&self, key: S) -> Option<&Value>;
Run Code Online (Sandbox Code Playgroud)

是否可以传入对字符串的引用,因此String在将函数传递给函数时不需要克隆(使用类似的东西Into<&String>>)?

rust

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