我想用gnuplot从数据文件中绘制图形,比如说foo.data.目前,我在命令文件中硬编码了数据文件名,比如foo.plt,并运行命令gnuplot foo.plg
来绘制数据.但是,我想将数据文件名作为命令参数传递,例如运行命令gnuplot foo.plg foo.data
.如何解析gnuplot脚本文件中的命令行参数?谢谢.
在BASH中,是否可以在函数体中获取函数名称?以下面的代码为例,我想在其正文中打印函数名"Test",但"$ 0"似乎是指脚本名而不是函数名.那么如何获取函数名称?
#!/bin/bash
function Test
{
if [ $# -lt 1 ]
then
# how to get the function name here?
echo "$0 num" 1>&2
exit 1
fi
local num="${1}"
echo "${num}"
}
# the correct function
Test 100
# missing argument, the function should exit with error
Test
exit 0
Run Code Online (Sandbox Code Playgroud) 目前,我正在使用std::thread
C++ 11 实现一个多线程项目.我std::condition_variable
用来同步线程.详细地说,一个消费者函数从全局任务队列调用wait()
成员函数std::condition_variable
等待任务,另一个生成器函数生成并将任务放入队列.但我不知道notify_all()
和notify_one()
成员函数之间的区别std::condition_variable
.我应该在生产者函数中使用哪个函数?谢谢!
在我的项目中,我想将流分割为某些给定类型的值,因此我将模板函数实现为
template <typename TElem, typename TOutputIter>
TOutputIter SplitSpace(std::istream& IS, TOutputIter result)
{
TElem elem;
while (IS >> elem)
{
*result = elem;
++result;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
我认为这很尴尬,因为我必须明确给出TElem
调用时的类型.例如,我必须写:
std::vector<int> v;
SplitSpace<int>(std::cin, back_inserter(v));
// I want to it to be SplitSpace(std::cin, back_inserter(v));
Run Code Online (Sandbox Code Playgroud)
我试图从(模板)迭代器获取值类型并使用std::iterator_traits
如下:
template <typename TOutputIter>
TOutputIter SplitSpace(std::istream& IS, TOutputIter result)
{
typename std::iterator_traits<TOutputIter>::value_type elem;
while (IS >> elem)
{
*result = elem;
++result;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
但是,上述代码不起作用back_insert_iterator
.我检查的源代码back_insert_iterator/front_insert_iterator/insert_iterator
中std
的命名空间,发现value_type/difference_type/pointer/reference
都是 …
这有可能获得参数的数量std::function
吗?有点像NumOfArgument<...>::value
.
例如,NumOfArgument<function<int(int, int)> >::value
应该是2.
我使用Evince在Ubuntu Linux 10.04上查看PDF文件.但有时程序无法正确显示数学符号.
一个例子.PDF文件可以从以下网址下载:
参见等式(1).
在Windows上,Acrobat Reader正确显示公式:
但在Linux上,
\sum
它显示为一个实心点:
我已经安装的软件包:ttf-symbol-replacement
,libpoppler5
,poppler-data
.
假设有一个json文件:
{
"columns": {
"id": {
"required": true,
"type": "integer"
},
"name": {
"required": false,
"type": "string"
},
"description": {
"type": "string"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想用来jq
获取每列的值“必填”字段。如果“必填”字段不存在,则应返回默认值false
。
具体来说:
jq '.columns.id | getOrDefault("required", false)' # true
jq '.columns.name | getOrDefault("required", false)' # false
jq '.columns.description | getOrDefault("required", false)' # false
Run Code Online (Sandbox Code Playgroud)
如何在 中实现这个神奇的 getOrDefault() 函数jq
?
在我的项目中,我想实现一些现有更大类的模板代理类.现有的类是库类,因此无法修改它们.在大多数情况下,客户端不知道对象是代理类或更大类的实例.但是,在某些情况下,客户必须知道详细的课程信息.由于代理类本身就是一个模板类,我不认为通过类名简单的函数重载可以解决这个问题.我认为可能的解决方案是在代理类中添加内部嵌套类或typedef,并且客户端检查是否存在此类/ typedef以获取类信息.我的问题是:如何检查类是否在C++ 11中指定了嵌套类定义或typedef?
以下代码显示了一个示例:
#include <iostream>
#include <functional>
#include <string>
#include <vector>
#include <type_traits>
typedef std::string CBig1; // use string for demonstration
typedef std::string CBig2; // use string for demonstration
//class CBig1; // the bigger class 1, codes of which can not be changed
//class CBig2; // the bigger class 2, codes of which can not be changed
template <typename _Big, typename _Other>
class CProxy
{
public:
struct proxy_tag { };
};
// how to implement this ?
// the …
Run Code Online (Sandbox Code Playgroud) 要求在给定 Kafka 主题的同一分区中进行排序是很常见的。也就是说,具有相同密钥的消息应该发送到相同的分区。现在,如果我想在正在运行的主题中添加新分区,如何制作并保持一致性?
据我了解,默认的分区策略是对 num-of-partition 进行 mod 。当分区数量改变时(例如4到5),一些消息可能会落入与之前具有相同键的消息不同的分区中。
我可以想象实现一致的散列来定制分区行为,但这可能会造成干扰。
或者,停止所有生产者,直到所有消息被消耗完;然后部署新分区并重新启动所有生产者。
还有更好的想法吗?
假设有一个文本文件:
10 A QAZ
5 A EDC
14 B RFV
3 A WSX
7 B TGB
Run Code Online (Sandbox Code Playgroud)
我希望将第二列作为具有字母顺序的主列和第一列作为具有数字顺序的辅助列进行排序.以下是预期结果:
3 A WSX
5 A EDC
10 A QAZ
7 B TGB
14 B RFV
Run Code Online (Sandbox Code Playgroud)
我尝试了sort -k 2,2 -k 1,1 a.txt -n
,sort -k 2,2 -k 1,1 a.txt
但都给出了错误的结果.我该怎么解决这个问题?谢谢.
我刚刚将操作系统从Ubuntu 8.04升级到Ubuntu 12.04,以及相应的VIM包.但是,我发现BASH脚本的新VIM语法突出显示很奇怪:(1)开括号和右括号的颜色不同; (2)评论的颜色似乎错了; (3)注释中的BASH关键字不应突出显示.我已经加入let g:is_bash=1
并syntax on
成为我的".vimrc"文件.我不确定这是否是VIM的错误或我的设置有问题.解决这个问题的任何方法?谢谢.
错误语法突出显示的屏幕截图.
突出显示相应正确语法的屏幕截图:
新的(错误的)VIM版本是:VIM - Vi IMproved 7.3(2010年8月15日,编译于2012年5月4日04:21:49)包含的补丁:1-429
旧的(正确的)VIM版本是:VIM - Vi IMproved 7.2(2008年8月9日,编译时间为2009年9月21日11:21:42)包含的补丁:1-245
我尝试将std :: log作为函数参数传递,但似乎有std :: log的重载实现,并且编译器无法解析它.代码:
#include <cmath>
#include <iostream>
#include <vector>
#include <string>
#include <functional>
template <typename FOper>
double Eval(FOper fOper, double X)
{
return fOper(X);
}
int main(int argc, char* argv[])
{
std::function<double(double)> fPlus1 = std::bind(std::plus<double>(), 1.0, std::placeholders::_1);
std::cout<<Eval(fPlus1, 10.0)<<std::endl;
// how to write this fLog ?
//std::function<double(double)> fLog = std::log;
//std::function<double(double)> fLog = std::log<double>;
std::cout<<Eval(fLog, 10.0)<<std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我取消注释fLog定义的任一行,则编译器会提示错误消息:
error: conversion from '<unresolved overloaded function type>' to non-scalar type 'std::function<double(doubl
e)>' requested
Run Code Online (Sandbox Code Playgroud) 我正在 Dart 中实现一些数据验证库。验证方法具有void
返回类型并在错误时引发异常。下面的代码显示了一个示例。
import 'package:quiver/check.dart';
void validate(int value) {
checkArgument(value >= 0 && value <= 100);
}
Run Code Online (Sandbox Code Playgroud)
在单元测试中,我可以使用以下代码来测试无效输入的异常情况:
expect(() => validate(-1), throwsArgumentError);
Run Code Online (Sandbox Code Playgroud)
但是,如何验证该方法不会为有效输入抛出异常?