我的程序通常生成巨大的输出文件(~1 GB),我不想备份到git存储库.所以不是能够做到的
git add .
Run Code Online (Sandbox Code Playgroud)
我必须做点什么
git add *.c *.cc *.f *.F *.C *.h *.cu
Run Code Online (Sandbox Code Playgroud)
这有点麻烦......
我相信我可以编写一个快速的perl脚本,将目录内容写入.gitignore,然后根据.gitinclude(或类似名称)文件删除文件,但这似乎有点过于苛刻.有没有更好的办法?
有什么区别
case item.class
when MyClass
# do something here
when Array
# do something different here
when String
# do a third thing
end
Run Code Online (Sandbox Code Playgroud)
和
case item.class
when MyClass.class
# do something here
when Array.class
# do something different here
when String.class
# do a third thing
end
Run Code Online (Sandbox Code Playgroud)
出于某种原因,这些中的第一个有时会起作用而第二个起作用,而其他时候,第二个起作用,而第一个起作用.为什么?哪一个是"正确"的方式呢?
请考虑以下代码:
#include <iostream>
#include <type_traits>
struct Test { Test& operator++(); };
struct NoIncrement { };
template <typename...> using void_t = void;
template <class, class=void_t<>>
struct has_pre_increment_member : std::false_type { };
template <class T>
struct has_pre_increment_member<T, void_t<decltype( ++std::declval<T&>() )>>
: public std::true_type { };
int main() {
std::cout << has_pre_increment_member<Test>::value << " ";
std::cout << has_pre_increment_member<NoIncrement>::value << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
使用g ++版本5及更高版本(当然还有-std = c ++ 14标志),此代码输出
1 0
Run Code Online (Sandbox Code Playgroud)
正如它应该.但是,使用g ++版本4.9(以及-std = c ++ 14标志),它会输出
1 1
Run Code Online (Sandbox Code Playgroud)
两者都声称使用相同的语言标准,那么这里的问题是什么?
为什么这个代码用GCC(4.9和5+)编译,而不是用clang(3.5-3.9)编译?
void test(const int&) { }
int main() {
const int x = 42;
auto f = []{ test(x); };
}
Run Code Online (Sandbox Code Playgroud)
我有一些模糊的想法,认为这种差异与ODR(一种定义规则)的使用有关,但我不太了解这一点,以便弄清楚这里发生了什么.
在Scott Meyer的书" Effective Modern C++"(第167页)(印刷版)中,他给出了以下示例:
auto timeFuncInvocation = [](auto&& func, auto&&... params) {
// start timer;
std::forward<decltype(func)>(func)(
std::forward<decltype(params)>(params)...
);
// stop timer and record elapsed time;
};
Run Code Online (Sandbox Code Playgroud)
我完全理解完美的转发params,但是当我完全转发func相关时,我不清楚.换句话说,上述优点有以下几点:
auto timeFuncInvocation = [](auto&& func, auto&&... params) {
// start timer;
func(
std::forward<decltype(params)>(params)...
);
// stop timer and record elapsed time;
};
Run Code Online (Sandbox Code Playgroud) 我希望我的代码可以使用英特尔编译器或gcc/g ++进行编译,具体取决于configure参数.这可能吗?我需要在configure.ac和Makefile.am文件中放置什么来实现这一目标?
在Ruby中,程序员可以更改预定义的类.所以一个非常糟糕的程序员可以做类似的事情:
class String
def ==(other)
return true
end
end
Run Code Online (Sandbox Code Playgroud)
显然,几乎没有人会这么愚蠢,但是对于预定义类的更微妙的改变可能会导致已经工作的代码出现问题的想法在我看来违反了封装原则.
四个问题:
我知道这是一个有点主观的问题,但我真的想知道更广泛的编程社区对这个所谓的"猴子修补"的看法.
有没有办法让AppleScript访问右键单击停靠栏图标时出现的菜单项?
具体来说,这就是我想要做的事情:
我在MacOS X Snow Leopard上使用谷歌浏览器作为我的网络浏览器.我是键盘快捷键上瘾者,我使用QuickSilver为我能做的任何事情创建键盘快捷键.我做的最常见的事情之一是打开一个新的Web浏览器窗口.但是我经常使用Spaces来分区我正在处理的任务,当我打开带有QuickSilver触发器的Web浏览器或网页时,空格切换到我使用Chrome的最后一个空格并打开一个新标签,这通常是分散了我几个小时的注意力,因为它把我带到了不同的空间,从而完成了不同的任务.我可以通过右键单击Google Chrome图标并单击"新窗口"选项来解决此问题,该选项会在当前空间中打开一个新窗口.但是在AppleScript中,要对谷歌Chrome做任何事情,我要做的第一件事就是激活它,这让我回到原来的问题!任何人都可以想到这个问题的解决方案,AppleScript或其他?这已经成为一个严重的问题.回到我使用Firefox的时候,我通过改变一个首选项来解决这个问题,该首选项说"总是在新窗口中打开弹出链接"或类似的东西,这是一种大锤方法,但它起作用了.我总是可以回到Firefox,但我想我先问我的问题.有想法的人吗?
很简单的问题:
特别是在Python中(因为Python实际上具有在PEP 8中指定的"强烈推荐"样式指南,但实际上这适用于任何语言),具有if始终返回的子句的函数是否应该在子句中具有替代代码else?换句话说,func_style_one()和func_style_two()在下面的代码段是(明显)完全等效:
def func_style_one():
if some_conditional_function():
do_something()
return something()
else:
do_something_else()
return something_else()
def func_style_two():
if some_conditional_function():
do_something()
return something()
do_something_else()
return something_else()
Run Code Online (Sandbox Code Playgroud)
显然,最好和最具可读性的风格取决于具体情况,而且意见会有所不同,哪个更好,但我问的是核心Python社区特别偏好哪个.(例如,标准库中哪些更常用,所有其他条件相同?)
我正在编写一些Jinja2模板,我希望能够在切向相关项目中尽可能轻松地重用这些模板.我有一套自定义便利过滤器,我希望模板随身携带.是否有用于将过滤器定义嵌入模板本身的Jinja2语法?或者是一种将任何类型的纯Python函数嵌入到Jinja2模板中的机制,该模板可以作用于传递给模板的变量?我曾经使用mako,并且在那里做这件事是微不足道的,但是由于缺乏自定义语法,在mako中模板化LaTeX是痛苦的,所以我不得不进行切换.