小编dha*_*rdy的帖子

bash/fish命令用于打印文件的绝对路径

问题:是否有一个简单的sh/bash/zsh/fish/...命令来打印我提供的文件的绝对路径?

用例:我在目录中/a/b,我想c在命令行上打印文件的完整路径,以便我可以轻松地将其粘贴到另一个程序中:/a/b/c.简单但是一个小程序可以在处理长路径时节省大约5秒钟,这最终会增加.因此,令我惊讶的是,我无法找到标准实用程序来执行此操作 - 真的没有吗?

这是一个示例实现,abspath.py:

#!/usr/bin/python
# Author: Diggory Hardy <diggory.hardy@gmail.com>
# Licence: public domain
# Purpose: print the absolute path of all input paths

import sys
import os.path
if len(sys.argv)>1:
    for i in range(1,len(sys.argv)):
        print os.path.abspath( sys.argv[i] )
    sys.exit(0)
else:
    print >> sys.stderr, "Usage: ",sys.argv[0]," PATH."
    sys.exit(1)
Run Code Online (Sandbox Code Playgroud)

bash shell path

405
推荐指数
14
解决办法
28万
查看次数

如何在GDB中调试失败的货物测试?

我有一个失败的货物测试:

$ cargo test
[snip]
    Running target/gunzip-c62d8688496249d8

running 2 tests
test test_extract_failure ... FAILED
test test_extract_success ... ok

failures:

---- test_extract_failure stdout ----
        task 'test_extract_failure' panicked at 'assertion failed: result.is_err()', /home/dhardy/other/flate2-rs/tests/gunzip.rs:19



failures:
    test_extract_failure

test result: FAILED. 1 passed; 1 failed; 0 ignored; 0 measured

task '<main>' panicked at 'Some tests failed', /home/rustbuild/src/rust-buildbot/slave/nightly-linux/build/src/libtest/lib.rs:250
Run Code Online (Sandbox Code Playgroud)

如何在GDB之类的调试器中启动失败测试?

这应该是一个普遍的问题,但对于那些想要回溯我的步骤的人来说,安装一个最近的每晚Rust构建和:

git clone https://github.com/dhardy/flate2-rs.git
git checkout 24979640a880
cd flate2-rs
cargo test
Run Code Online (Sandbox Code Playgroud)

gdb rust rust-cargo

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

如何将枚举值与整数匹配?

我可以得到这样的枚举的整数值:

enum MyEnum {
    A = 1,
    B,
    C,
}

let x = MyEnum::C as i32;
Run Code Online (Sandbox Code Playgroud)

但我似乎无法做到这一点:

match x {
    MyEnum::A => {}
    MyEnum::B => {}
    MyEnum::C => {}
    _ => {}
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能匹配枚举值或尝试转换xMyEnum

我可以看到这样的函数对枚举很有用,但它可能不存在:

impl MyEnum {
    fn from<T>(val: &T) -> Option<MyEnum>;
}
Run Code Online (Sandbox Code Playgroud)

rust

27
推荐指数
6
解决办法
2万
查看次数

为什么我不能删除我刚发现的子元素?NOT_FOUND_ERR

我正在构建一个脚本,它必须修补XML文件,包括用另一个元素替换一个元素列表.以下函数将补丁(包含可能为空的同名元素列表)应用于父元素的同名元素列表(也可能是空列表).(这只是修补逻辑的一小部分).

为什么,当我运行代码时,是否会出现以下错误?

org.w3c.dom.DOMException: NOT_FOUND_ERR: An attempt is made to reference a node in a context where it does not exist.
    at com.sun.org.apache.xerces.internal.dom.ParentNode.internalRemoveChild(ParentNode.java:503)
    at com.sun.org.apache.xerces.internal.dom.ParentNode.removeChild(ParentNode.java:484)
    at CombineSweeps$PTReplaceNodeList.apply(CombineSweeps.java:514)
Run Code Online (Sandbox Code Playgroud)

(第514行标记如下.)据我所知,我刚刚验证了元素是否存在(因为NodeList是实时的,它的第一个条目将始终是下一个匹配或null).有趣的是,这并不总是一个问题.

private static class PTReplaceNodeList extends PTBase {
    private final String name;
    private final String nextElement;
    private final List<Node> childList;

    ...

    int apply(Document document, Node parent, Node node_unused) {
        NodeList nodes;
        // A marker for where to insert our nodes.
        // We make a guess using nextElement (if null, means at end).
        Node refNode …
Run Code Online (Sandbox Code Playgroud)

java xml removechild getelementsbytagname

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

在Rust中调试堆栈溢出是否有任何标准方法?

获得回溯会很好.

$ cargo test
    Running target/debug/partition_ops-b31bcf7b82e2e8d5

running 1 test

thread 'create_small' has overflowed its stack
Process didn't exit successfully: `/home/dhardy/other/pippin/target/debug/partition_ops-b31bcf7b82e2e8d5` (signal: 11)

To learn more, run the command again with --verbose.
Run Code Online (Sandbox Code Playgroud)

stack-overflow rust

12
推荐指数
2
解决办法
1155
查看次数

如何重载+ ="加上等于"运算符?

如何在自定义类型中使用"+ ="等复合运算符?

重载一些基本的运营商通过实施是可能的Add,Sub等等.但似乎没有任何支持+=,也没有x += y自动解释为x = x + y(从1.0 alpha版本).

operator-overloading rust

6
推荐指数
2
解决办法
1763
查看次数

是否有用于Rust的gzip库?

我的搜索发现:

flate库的基础上,miniz。编辑:正如Mark Adler所指出的,这是一个zlib库,但不处理gzip标头。

活泼的 绑定,不能在现代Rust上编译。

gzip zlib rust

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

C/C++中的实模运算符?

可能重复:
如何编写处理负数的C/C++/Obj-C中的模数(%)运算符

根据我的理解(参见具有负值模运算的模运算符)C&C++有一个"余数"运算符,a % b但是当LHS为负时,没有实际执行模运算的运算符.

有几种语言确实有这样的功能.是否有可能在C/C++中构建一个高效的函数(或者在i686/x64 CPU上没有有效的方法)?

目前我使用的(n * b + a) % b地方n是,我相当确定整个LHS是非负的,但不可避免地会改变代码并且有时会发生错误.

注意:如果不清楚,通过模运算我的意思是一个运算符,a + b % b = a % b对于所有整数a和所有正整数b.

c c++ modulo

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

BTreeMap/VecMap中的最后一项(`back()`)

如果您有一个键/值对的排序映射(或只是键),其中一个明显的操作是获取第一个或最后一个(或键).

C++的std::vector方便了front()back()用于这一目的.std::map没有,但是*map.begin()*map.rbegin()(反向迭代器),用于这方面的工作(假定人知道地图不为空).

在Rust中,获取地图的第一个元素似乎需要map.iter().next().unwrap()- 丑陋,但考虑到需要进行一些错误检查可能是合理的.

但是我们怎样才能获得最后一个元素呢?通过加强对所有元素:map.iter().last().unwrap()

我知道有Iterator::rev(),map.iter().rev().next().unwrap()合理的替代方案呢?

b-tree rust

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

如何在Rust中索引C数组?

我有一个返回指针的C函数:

type MYSQL_RES_REF = *mut c_void;
type MYSQL_ROW = *const *const c_char;

#[no_mangle]
extern "C" {
    fn mysql_fetch_row(res: MYSQL_RES_REF) -> MYSQL_ROW;
}

let pointer = mysql_fetch_row(self.res);
let row_p = match pointer {
    p if p == (0 as *const *const c_char) => panic!(),
    p => p,
};

let field: &[u8] = unsafe { ffi::c_str_to_bytes(row_p[i]) };
Run Code Online (Sandbox Code Playgroud)

但尝试索引它(最后一行)会导致错误:

error: cannot index a value of type `*const *const i8`
Run Code Online (Sandbox Code Playgroud)

我想知道std::c_vec是不是我想要的,但显然已被删除.

arrays ffi rust

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

valgrind:无效写入

在以下代码中:

void ResourceFitter::copyToLarvalResources( const gsl_vector* input ){
    assert( input->size == invLarvalResources.size() );
    if( invLarvalResources.size() != 365 ){
        cout<<"error: iLR.size(): "<<invLarvalResources.size()<<endl;
        exit(21);
    }
    // inverting larval resources may help fitting algorithm, so we do that here:
    for( size_t i=0; i<invLarvalResources.size(); ++i ){
        if( i >= 365 ){
            cout<<"error: i="<<i<<endl;
            exit(22);
        }
        double val = gsl_vector_get( input, i );
        invLarvalResources[i] = 1.0 / val;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是 ResourceFitter.cpp 中的几行。第 380 行是最后一行代码(在 invLarvalResources 中赋值)。invLarvalResources 是一个vector<double>.

valgrind 抱怨:

==30152== Invalid write of …
Run Code Online (Sandbox Code Playgroud)

c++ gcc valgrind

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