小编Sea*_*rry的帖子

测试私有功能的惯用方法是什么?

Rust书,使用"测试"模块是进行单元测试的惯用方法.但是,如果该函数未标记为"pub",我无法在tests模块中看到超级模块的函数.那么如何测试内部函数呢?

我的第一直觉是寻找#ifdef关键字的方法pub.我过去曾为C++测试做过这个.对于Rust,我所做的只是对模块中的私有函数进行测试,然后在"tests"模块中测试公共接口.

我做得对吗?

unit-testing idioms rust

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

在 Go 中是否可以有一个指向带有参数的成员函数/方法的指针?

如果我有

type Foo struct {
    // some data
}

func (f *Foo) Op1() bool {
    // perform operation and return a bool
}

func (f *Foo) Op2(other int) bool {
    // perform a different operation using internal data
    // and the passed in parameter(s)
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以存储指向第一个方法的指针。

fn := f.Op1
Run Code Online (Sandbox Code Playgroud)

并称之为

if fn(f) { // do something }
Run Code Online (Sandbox Code Playgroud)

但如果我想对 做同样的事情怎么办Op2?我目前通过定义一个包装函数来伪造它,该函数接受 aFoo和值并调用操作。但这是很多样板代码。

go

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

当函数来自不同模块时,如何在 Rust 中实现函数向量(数组,..)

我见过:

并在网上搜索。我不想关闭。我正在尝试实现一个经典的动态(-ish)函数查找表。

mod impl_foo;
mod impl_bar;

use utils;
// a CmdResult is a Result with a tuple of an int and a string

static FUNCTIONS: &'static [fn(&[String]) -> utils::CmdResult] = &[
    ("bar".to_string(), impl_bar::call_bar),
    ("foo".to_string(), impl_foo::call),
];

fn find_action(name: &String) -> (fn(&[String]) -> utils::CmdResult) {
    match FUNCTIONS.binary_search_by(|item| item[0].cmp(name)) {
        Ok(action) => action,
        Err(_) => (|&[String]| Err((1, format!("Unknown '{}'", name))))
    }
}

// later on in another function ....
Run Code Online (Sandbox Code Playgroud)

动作 = find_action("foo"); 让结果=动作(参数);// 处理结果

但这不能编译:

src/main.rs:44:5: 44:50 error: mismatched …
Run Code Online (Sandbox Code Playgroud)

arrays rust

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

在https://github.com/Workiva/go-datastructures/tree/master/bitarray中定义的's'在哪里?

我没看到在哪里s定义.大师不会告诉我.我得到的只是"没有标识符的对象",但它知道k它旁边的权利.以下是链接代码的典型代码段:

func getIndexAndRemainder(k uint64) (uint64, uint64) {
    return k / s, k % s
}
Run Code Online (Sandbox Code Playgroud)

一个字母的变量名称肯定会让你更难以找到.我找了通常的嫌疑人:var s uint64,s := ...什么都没有.显然,它需要是某个地方定义的全球价值.

这让我有两个问题:

  1. s来自哪里?
  2. 如果不在这里问我怎么才能找到它?

编辑:对于其他偶然发现此事的人.

Guru失败了,因为我没有在适当的Go工作区下检查包的源代码,方法是将git clone放在/ some/path/src下并设置GOPATH为/ some/path.因此,虽然我认为GOPATH=. guru definition s会起作用,GOPATH但却被忽略了.大师可以找到,k因为它在文件中,但它不知道如何查看其他文件.

我的grep失败的原因const使用简单=而不是a :=.我将在将来贪图时记住这一点.

go go-guru

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

标签 统计

go ×2

rust ×2

arrays ×1

go-guru ×1

idioms ×1

unit-testing ×1