我正在寻找一个命令行实用程序,它至少会以人类可读的形式呈现二进制protobuf数据.过滤和选择选项(沿着cut文本行)会很好,但主要目的是使数据可见以便进行调试.
如果没有该工作的权威工具,相关包的链接就可以了.
我遇到了一些奇怪的Perl行为:在regexp中使用Posix字符类完全改变了结果字符串的排序顺序.
这是我的测试程序:
sub namecmp($a,$b) {
$a=~/([:alpha:]*)/;
# $a=~/([a-z]*)/;
$aword= $1;
$b=~/([:alpha:]*)/;
# $b=~/([a-z]*)/;
$bword= $1;
return $aword cmp $bword;
};
$_= <>;
@names= sort namecmp split;
print join(" ", @names), "\n";
Run Code Online (Sandbox Code Playgroud)
如果使用[az]更改为注释掉的正则表达式,则会获得正常的词典排序顺序.但是,Posix [:alpha:]字符类会产生一些怪异的排序顺序,如下所示:
$test_normal
aaa aab aac aba abb abc aca acb acc baa bab bac bba bbb bbc bca bcb bcc caa cbb
aaa aab aac aba abb abc aca acb acc baa bab bac bba bbb bbc bca bcb bcc caa cbb
$test_posix
aaa aab aac aba abb …Run Code Online (Sandbox Code Playgroud) 由于我们知道0.1 + 0.2 != 0.3由于代表数量有限,我们需要检查帽子abs(0.1+0.2 - 0.3) < ?.问题是,我们通常应该为不同类型选择什么ε值?是否可以根据位数以及可能执行的操作的数量和类型来估计它?
我写了以下内容:
data Expression = Expression { lhs :: Int, rhs :: Expression } | Int
Run Code Online (Sandbox Code Playgroud)
问题是如果我尝试用一个int构造一个Expression我得到一个部分应用的函数.解决这个问题的最佳方法是什么?