我刚卸载了旧版本的Ruby,删除了所有宝石(包括Rails),并安装了Ruby 2.0.换句话说,一个完全干净的重新安装.启动IRB后,我收到了以下消息:
DL is deprecated, please use Fiddle
注意:我在Windows机器上.
这条消息是什么意思?
~>在Ruby gem依赖关系的上下文中意味着什么?
例如,在RubyMine IDE中打开旧项目时,我收到此消息
Gems required for project are not attached: arel (~> 2.0.2), rspec-expectation (~> 2.5.0)...
我已经在Ruby世界的其他地方看到了这种波形符号(它不是特定于RubyMine).这个操作符的名称是否比笨拙的波形符号更大?
静态元编程(又名"模板元编程")是一种很棒的C++技术,它允许在编译时执行程序.一读到这个规范的元编程示例,一个灯泡在我脑海中消失了:
#include <iostream>
using namespace std;
template< int n >
struct factorial { enum { ret = factorial< n - 1 >::ret * n }; };
template<>
struct factorial< 0 > { enum { ret = 1 }; };
int main() {
cout << "7! = " << factorial< 7 >::ret << endl; // 5040
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果想要了解更多关于C++静态元编程的知识,那么最好的来源是什么(书籍,网站,在线课件,等等)?
我希望我的Python脚本能够在Vista上复制文件.当我从普通cmd.exe窗口运行它时,不会生成错误,但不会复制文件.如果我运行cmd.exe"作为管理员",然后运行我的脚本,它工作正常.
这是有道理的,因为用户帐户控制(UAC)通常会阻止许多文件系统操作.
有没有办法可以在Python脚本中调用UAC提升请求(这些对话框说"像这样的应用程序需要管理员访问权限,这样可以吗?")
如果那是不可能的,那么我的脚本是否有一种方法可以至少检测到它没有被提升以便它可以优雅地失败?
在一些代码,我继承,我看到经常使用size_t与std命名空间限定词.例如:
std::size_t n = sizeof( long );
Run Code Online (Sandbox Code Playgroud)
当然,它编译并运行良好.但对我来说这似乎是不好的做法(也许是从C继承下来的?).
是不是真的size_t是内置到C++中,因此在全局命名空间中?是否需要size_t在C++中使用头文件?
提出这个问题的另一种方法是,是否需要在所有C++编译器上编译以下程序(没有包含)?
size_t foo()
{
return sizeof( long );
}
Run Code Online (Sandbox Code Playgroud) 所以在Rails 3.2中,不推荐使用ActiveSupport :: Memoizable.
消息如下:
DEPRECATION WARNING: ActiveSupport::Memoizable is deprecated and
will be removed in future releases,simply use Ruby memoization
pattern instead.
Run Code Online (Sandbox Code Playgroud)
它指的是"Ruby memoization pattern"(单数),好像有一个模式,我们都应该知道并参考...
我认为他们的意思是:
def my_method
@my_method ||= # ... go get the value
end
Run Code Online (Sandbox Code Playgroud)
要么
def my_method
return @my_method if defined?(@my_method)
@my_method = # ... go get the value
end
Run Code Online (Sandbox Code Playgroud)
还有其他我错过的东西吗?
[这个问题有关,但并不等同于这一个 ]
如果我尝试使用某些类型的值作为布尔表达式,我会收到警告.我有时使用三元运算符(?:)转换为bool 而不是抑制警告.使用两个not运算符(!!)似乎做同样的事情.
这就是我的意思:
typedef long T; // similar warning with void * or double
T t = 0;
bool b = t; // performance warning: forcing 'long' value to 'bool'
b = t ? true : false; // ok
b = !!t; // any different?
Run Code Online (Sandbox Code Playgroud)
那么,双重技术真的做同样的事吗?它比三元技术更安全吗?这是技术与非整数类型(例如,具有同样安全void *或double对T)?
我不是在问好!!t风格.我在问它是否在语义上不同于t ? true : false.
我知道我可以编译单个源文件,但有时 - 比如说,在编辑许多文件使用的头.cpp文件时 - 需要重新编译多个源文件.这就是Build的用途.
VC9(Visual C++ 2008)中"Build"命令的默认行为是尝试编译需要它的所有文件.有时这只会导致许多失败的编译.我通常只是观察错误并点击ctrl-break来手动停止构建.
有没有办法配置它,以便构建在第一次编译错误(不是第一次失败的项目构建)自动停止?
c++ visual-studio-2005 visual-studio-2008 visual-studio visual-c++
[这个问题有关,但并不等同于这一个 ]
我的编译器警告隐式转换或将某些类型转换为bool,而显式转换不会产生警告:
long t = 0;
bool b = false;
b = t; // performance warning: forcing long to bool
b = (bool)t; // performance warning
b = bool(t); // performance warning
b = static_cast<bool>(t); // performance warning
b = t ? true : false; // ok, no warning
b = t != 0; // ok
b = !!t; // ok
Run Code Online (Sandbox Code Playgroud)
这是使用Visual C++ 2008但我怀疑其他编译器可能有类似的警告.
所以我的问题是:铸造/转换的性能影响是什么bool?在某些情况下(例如,对于某些目标体系结构或处理器),显式转换是否具有更好的性能?隐式转换是否会以某种方式混淆优化器?
微软对其警告的解释并不是特别有用.他们暗示有充分的理由,但他们没有解释.
我的代码适用于VC9(Microsoft Visual C++ 2008 SP1)但不适用于GCC 4.2(在Mac上):
struct tag {};
template< typename T >
struct C
{
template< typename Tag >
void f( T ); // declaration only
template<>
inline void f< tag >( T ) {} // ERROR: explicit specialization in
}; // non-namespace scope 'structC<T>'
Run Code Online (Sandbox Code Playgroud)
我知道GCC希望我在课外移动我的显式专业,但我无法弄清楚语法.有任何想法吗?
// the following is not correct syntax, what is?
template< typename T >
template<>
inline void C< T >::f< tag >( T ) {}
Run Code Online (Sandbox Code Playgroud)