我想以兆字节为单位获取磁盘上文件的大小.使用-s运算符给出了大小(以字节为单位),但我假设将其除以幻数是一个坏主意:
my $size_in_mb = (-s $fh) / (1024 * 1024);
Run Code Online (Sandbox Code Playgroud)
我应该只使用只读变量来定义1024,还是以编程方式获取千字节的字节数?
编辑:更新了错误的计算.
我在这里阅读了一些关于0xCAFEBABE每个java .class文件开头的幻数的帖子,想知道为什么需要它 - 这个标记的目的是什么?
还需要它吗?或者它现在只是为了向后兼容?
找不到答案的帖子 - 我也没有在java 规范中看到答案
假设我有一个magic number想要摆脱的...
//whatever.cpp
for (int i = 0; i < 42; i++)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
我可以通过两种方式杀死它:
在源文件中带有const int SOMETHING_SOMETHING_MEANING_OF_LIFE = 42
或带有。constexpr int SOMETHING_SOMETHING_MEANING_OF_LIFE = 42.cpp
在这种情况下,两者之间是否有任何有意义的区别(我记得编译器推断出-在任何一种情况下-值均未更改,因此42实际上将其硬编码在结果循环/展开循环/任何机器代码中)或归结为个人品味吗?
在一个相关的问题中:如果magic number在标头(.h)文件而不是源(.ccp)文件中声明了(从而替换它的事物),那会发生什么变化(如果是,则如何改变)呢?
可能重复:
持续滥用?
我已经看到-1在各种API中使用,最常见的是搜索具有从零开始的索引的"集合"时,通常用于指示"未找到"索引.这"有效",因为-1从来不是一个合法的索引.似乎任何负数都应该有效,但我认为-1几乎总是使用某种(不成文的?)约定.
我想至少暂时将范围限制为Java.我的问题是:
-1像这样的"特殊"返回值,Sun的官方文字是什么?我有一个模块,它做了一些非约束最小化.我想保持其界面尽可能简单,因此最好的选择是将其缩小为单个函数,例如:min_of(F).
但是一旦它是残酷的计算,我将不得不处理至少两个常数:最小化算法的精度和最大迭代次数,因此如果目标函数根本没有局部最小值,它就不会自行挂起.
无论如何,下一个最佳选择是:min_of(F,Iterations,Eps).没关系,但我不喜欢它.我还想让另一个min_of(F)定义如下:
min_of( F ) ->
min_of( F, 10000, 0.0001).
Run Code Online (Sandbox Code Playgroud)
但没有魔术数字.
我是Erlang的新手,所以我不知道如何妥善处理这个问题.我应该定义一个宏,一个变量,还是一个返回常量的函数?甚至还有其他什么?我发现Erlang很有表现力,所以这个问题似乎比技术问题更好.
G'day Stackoverflowers,
我是Perl的autodie pragma 的作者,它改变了Perl的内置函数,以便在失败时抛出异常.它类似于Fatal,但具有词法范围,可扩展的异常模型,更智能的返回检查以及更多更好的错误消息.它将Fatal在未来的Perl版本(暂定5.10.1+)中替换该模块,但目前可以从CPAN for Perl 5.8.0及更高版本下载.
下一个版本autodie将为flock使用LOCK_NB(非阻塞)选项的调用添加特殊处理.虽然失败的flock调用通常会导致异常autodie,但是如果返回的errno()是,则对flock使用失败的调用LOCK_NB将仅返回false .$!EWOULDBLOCK
这样做的原因是人们可以继续编写如下代码:
use Fcntl qw(:flock);
use autodie; # All perl built-ins now succeed or die.
open(my $fh, '<', 'some_file.txt');
my $lock = flock($fh, LOCK_EX | LOCK_NB); # Lock the file if we can.
if ($lock) {
# Opportuntistically do something with the locked file.
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,由于其他人已将文件锁定为has(EWOULDBLOCK)而失败的锁定不被视为硬错误,因此自动重放 …
这是一个在许多.NET异常中作为退出代码返回的数字(特别是COM异常,我认为).
在这个问题中,有人使用Reflector来发现这个值几乎在每个Exception构造函数中被初始化为一个私有变量.
我的问题是,为什么?这个号码有什么意义?很难相信它是任意选择的.我甚至没有看到任何数字意义(例如,在其二进制或十六进制表示中).
我在遗留代码和一些.NET开源项目中看到了这一点.我无法想象这样做的理由.只使用"null"对我来说似乎更容易.
例:
public class Category
{
int parentID;
bool HasParent
{
get
{
return parentID != -1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
与
public class Category
{
int parentID;
bool HasParent
{
get
{
return parentID != null;
}
}
}
Run Code Online (Sandbox Code Playgroud) 好的,每个人都知道200没关系,找不到404.但是对于永久与临时重定向或需要付款或其他更奇特的HTTP错误代码之类的东西,最好做以下事情:
response.status('REQUEST_ENTITY_TOO_LARGE');
Run Code Online (Sandbox Code Playgroud)
而不是仅仅使用一般被认为是不好的魔术数字.当然,我可以在某个对象中有413:'REQUEST_ENTITY_TOO_LARGE',但是Express已经有了状态代码的副本 - >名称映射,我宁愿不重复它.
如何在Express JS中按名称指定响应状态?
编辑:感谢@Akshat指出http.STATUS_CODES.阐述他的答案,因为价值观本身是独一无二的,人们可以运行:
var statusCodeByName = {};
for ( var number in http.STATUS_CODES ) {
statusCodeByName[http.STATUS_CODES[number]] = number
}
Run Code Online (Sandbox Code Playgroud)
这允许一个人:
> statusCodeByName['Request Entity Too Large']
'413'
Run Code Online (Sandbox Code Playgroud)