小编mca*_*ton的帖子

Golang是否支持可变函数?

我想知道无论如何我可以在Go中为未知数量的变量定义一个函数.

像这样的东西

 func Add(num1... int) int {
    return args
  }

  func main() {
        fmt.Println("Hello, playground")
        fmt.Println(Add(1, 3, 4, 5,))
  }
Run Code Online (Sandbox Code Playgroud)

我想概括为任意数量的输入添加函数.

go

63
推荐指数
2
解决办法
5万
查看次数

为什么 Rust 允许通过空指针调用函数?

我在 Rust 中尝试了函数指针魔术,最终得到了一个代码片段,我完全没有解释它为什么编译,甚至更多,为什么它运行。

fn foo() {
    println!("This is really weird...");
}

fn caller<F>() where F: FnMut() {
    let closure_ptr = 0 as *mut F;
    let closure = unsafe { &mut *closure_ptr };
    closure();
}

fn create<F>(_: F) where F: FnMut() {
    caller::<F>();
}

fn main() {
    create(foo);
    
    create(|| println!("Okay..."));
    
    let val = 42;
    create(|| println!("This will seg fault: {}", val));
}
Run Code Online (Sandbox Code Playgroud)

我无法解释为什么 foo通过将空指针caller(...)转换为 type 的实例来调用F。我原以为只能通过相应的函数指针调用函数,但鉴于指针本身为空,显然情况并非如此。话虽如此,似乎我显然误解了 Rust 类型系统的一个重要部分。

操场上的例子

rust

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

Convert.FromBase64String在代码中不起作用,但适用于在线工具

我正在编写一个C#应用程序来解码这个字符串:

"--W3sic3RhcnRfdGltZSI6IjAiLCJwcm9kdWN0X2lkIjoiODQwMDMzMDQiLCJ1cmwiOiIifSx7InN0YXJ0X3RpbWUiOiI3OSIsInByb2R1Y3RfaWQiOiI4NDAzNjk2MSIsInVybCI6IiJ9LHsic3RhcnRfdGltZSI6IjgyIiwicHJvZHVjdF9pZCI6Ijg0MDAzMDIwIiwidXJsIjoiIn0seyJzdGFydF90aW1lIjoiMTA5IiwicHJvZHVjdF9pZCI6IiIsInVybCI6Imh0dHBzOi8vYmxvZy5sYXJlaW5lZHVzaG9wcGluZy5jYS8yMDE3LzAxL3RyYW5zZm9ybWVyLXNlcy12aWV1eC1nYW50cy1kZS1jdWlyLWVuLTUtbWludXRlcy8ifV0 ="

当我将其复制/粘贴到此在线工具中时,它可以工作:https://www.base64decode.org

但是当我使用它时抛出一个异常Convert.FromBase64String(str):

System.FormatException:输入不是有效的Base-64字符串,因为它包含非基本64个字符,两个以上的填充字符或填充字符中的非法字符.

为什么?

c# base64

9
推荐指数
2
解决办法
4万
查看次数

为什么我需要 mod 和 use 来将模块引入作用域?

为什么我需要编写mod以及use何时要将模块引入范围?

mod from_other_file;
use from_other_file::sub_module;

fn main() {
    sub_module::do_something();
}
Run Code Online (Sandbox Code Playgroud)

如果我这样做,则会出现错误,因为该模块未导入到当前文件中:

use from_other_file::sub_module;

fn main() {
    sub_module::do_something();
}
Run Code Online (Sandbox Code Playgroud)

错误信息:

error[E0432]: unresolved import `from_other_file`
 --> src/main.rs:1:5
  |
1 | use from_other_file::sub_module;
  |     ^^^^^^^^^^^^^^^ use of undeclared type or module `from_other_file`
Run Code Online (Sandbox Code Playgroud)

rust

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

获取一周的开始/结束日期

我需要chrono::Date今年一周的第一个和最后一个日期。

我有两个问题,首先我无法解析chrono今年的星期,第二我无法获得本周的第一个/最后一个日期。(这里有很多其他语言的解决方案,但没有rust)

TLDR:我需要一个这样的函数: fn x(week: isize) -> (Date<Local>, Date<Local>)元组为(一周的第一天,一周的最后一天)。

rust rust-chrono

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

其他选项而不是使用try-except

当文本文件中的第2行具有"nope"时,它将忽略该行并继续下一行.是否有另一种方法来写这个没有使用尝试,除了?我可以使用if else语句来执行此操作吗?

文本文件示例:

0 1 
0 2 nope
1 3 
2 5 nope
Run Code Online (Sandbox Code Playgroud)

码:

e = open('e.txt')
alist = []
for line in e:
    start = int(line.split()[0])
    target = int(line.split()[1])
    try:
        if line.split()[2] == 'nope':
            continue
    except IndexError:
        alist.append([start, target])
Run Code Online (Sandbox Code Playgroud)

python file filter try-except

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

Why does an existential type require a generic instead of an associated type?

I have an existential type defined like this:

trait Collection {
    type Element;
}
impl<T> Collection for Vec<T> {
    type Element = T;
}

type Existential<T> = impl Collection<Element = T>;
Run Code Online (Sandbox Code Playgroud)

A function, which takes a type implementing a trait with an associated type, returns this type. Why does this code work:

fn return_existential<I, T>(iter: I) -> Existential<T>
where
    I: IntoIterator<Item = T>,
    I::Item: Collection,
{
    let item = iter.into_iter().next().unwrap();
    vec![item]
}
Run Code Online (Sandbox Code Playgroud)

playground

while this does not:

fn return_existential<I>(iter: I) …
Run Code Online (Sandbox Code Playgroud)

generics existential-type rust associated-types

7
推荐指数
0
解决办法
215
查看次数

petgraph 中的哪个算法会找到从 A 到 B 的最短路径?

我有一个有向图,想找到从节点 A 到节点 B 的最短路径。我在crates.io搜索并找到了petgraph,它看起来像是最受欢迎的 crate。它实现了许多算法,但没有一个能解决我的任务。我错过了什么?

例如,Dijkstra 算法返回路径成本,但哪条路径的成本最低?该Bellman-Ford算法返回路径成本和节点,但没有路径。

这是我发现从图中打印路径的最简单方法:

extern crate petgraph;
use petgraph::prelude::*;
use petgraph::algo::dijkstra;

fn main() {
    let mut graph = Graph::<&str, i32>::new();
    let a = graph.add_node("a");
    let b = graph.add_node("b");
    let c = graph.add_node("c");
    let d = graph.add_node("d");

    graph.extend_with_edges(&[(a, b, 1), (b, c, 1), (c, d, 1), (a, b, 1), (b, d, 1)]);
    let paths_cost = dijkstra(&graph, a, Some(d), |e| *e.weight());
    println!("dijkstra {:?}", paths_cost);

    let …
Run Code Online (Sandbox Code Playgroud)

rust petgraph

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

在Windows VM和Linux主机之间共享Git存储库

我主要在Linux上工作,但我也有一个Windows VM,主要用于在Windows上运行单元测试.

在Linux中,我有一个Git存储库,可以使用VirtualBox共享文件夹从Windows VM访问.我不在Windows上使用Git,除了我们的构建系统,它记录当前的Git哈希以将其包含在可执行文件中(运行git describe --always --dirty).

现在,每次我在Linux或Windows上使用Git,然后再在另一个系统上使用Git,它需要一段时间.例如:

  Linux$ git status
  Linux$ git status # fast (<1s)
Windows$ git status # takes a few dozen seconds
Windows$ git status # fast (<1s)
  Linux$ git status # takes a few seconds
  Linux$ git status # fast (<1s)
Run Code Online (Sandbox Code Playgroud)

我有什么办法可以防止这种情况发生吗?我可以在Windows上关闭Git功能,因为它只需要获取哈希值.但是我无法改变获取此哈希的方式,因为这在构建系统中很深.我也不希望在Linux和Windows上有单独的存储库并且彼此提交/推送,因为这会导致更大的开销.

Linux git版本:2.11.0.

Windows git版本:2.14.1.windows.1.

git shared-directory

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

在 Rust 中将 ethereum_types::H256 转换为字符串

当我尝试使用 to_string()将ethereum_types::H256转换 为String时

\n\n
use ethereum_types::H256;\n\nfn main() {   \n    let s = H256::zero();\n    println!("{}", s);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我期望输出是

\n\n
"0x0000000000000000000000000000000000000000000000000000000000000000" \n
Run Code Online (Sandbox Code Playgroud)\n\n

但输出是

\n\n
"0x0000\xe2\x80\xa60000"\n
Run Code Online (Sandbox Code Playgroud)\n

string-conversion rust

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