当我学习PHP时,我在某处读到你应该总是使用大写版本的布尔值,TRUE并且FALSE,因为"普通"小写版本,true并且false使用起来并不"安全".
它已经很多年了,我编写的每个PHP脚本都使用大写版本.但是,我现在质疑,因为我已经看到大量用小写版本编写的PHP(即Zend Framework).
是/有没有理由使用大写版本,还是完全可以使用小写?
编辑:忘了提及这适用于NULL和null.
Java的一元加运算符似乎来自C,通过C++.
int result = +1;
Run Code Online (Sandbox Code Playgroud)
它似乎有以下影响:
int如果它不是已经int或更宽,则提升其操作数在我看来,有更好/更清晰的方法来做所有这些事情.
在这个SO问题中,关于C#中的对应运算符,有人说"如果你觉得有必要,它就会超载".
但是,在Java中,不能超载任何运算符.那么这个一元加运算符是否只存在于Java中,因为它存在于C++中?
我已经在C工作了很长时间以至于编译器通常在一个开头添加一个下划线这一事实extern只是被理解......然而,今天另一个SO问题让我想知道为什么添加下划线的真正原因.一篇维基百科文章称,原因是:
C编译器的常见做法是在所有外部作用域程序标识符之前加上前导下划线,以避免与运行时语言支持的贡献发生冲突
我认为这至少有一个真实的核心,但它似乎并没有真正回答这个问题,因为如果将下划线添加到所有外部,它对防止冲突没有多大帮助.
有没有人有关于领先下划线的理由的良好信息?
增加的下划线部分原因是Unix creat()系统调用不以'e'结尾?我听说某些平台上的早期链接器名称限制为6个字符.如果是这种情况,那么将下划线添加到外部名称似乎是一个彻头彻尾的疯狂想法(现在我只有5个字符可以玩......).
一般评论:任何对这个问题提供新的有用见解的新答案都将获得奖励。
的击参考手册提到击支持以下for循环结构:
for name [ [in [words ...] ] ; ] do commands; done
for (( expr1 ; expr2 ; expr3 )) ; do commands ; done
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,以下 for 循环结构也是有效的:
for i in 1 2 3; { echo $i; }
for ((i=1;i<=3;++i)); { echo $i; }
Run Code Online (Sandbox Code Playgroud)
这些不寻常的构造根本没有记录。无论是猛砸手册中,猛砸男子的页面,也不Linux文档计划使这些结构的任何提及。
在研究语言语法时,可以看到使用开闭大括号 ( { commands; }) 作为替代方案do commands; done是一种有效的构造,该构造适用于 for 循环和 select 语句,并且可以追溯到Bash-1.14.7
[1]。
另外两个循环结构:
until test-commands; do …Run Code Online (Sandbox Code Playgroud) 术语"英雄"是什么意思,为什么它用来命名网站/页面的"主要信息"?
具体来说,我想知道术语"英雄"或短语"英雄单位"是否是我设法错过的网页设计中使用的一些常用术语.
非常好奇.
我已经注意到了(至少在PY 2.6和2.7),一个float拥有所有熟悉的丰富的比较函数:__lt__(),__gt__,__eq__等.
>>> (5.0).__gt__(4.5)
True
Run Code Online (Sandbox Code Playgroud)
但是int没有
>>> (5).__gt__(4)
Traceback (most recent call last):
File "<input>", line 1, in <module>
AttributeError: 'int' object has no attribute '__gt__'
Run Code Online (Sandbox Code Playgroud)
这对我来说很奇怪,因为运营商本身运作良好
>>> 5 > 4
True
Run Code Online (Sandbox Code Playgroud)
甚至字符串也支持比较功能
>>> "hat".__gt__("ace")
True
Run Code Online (Sandbox Code Playgroud)
但所有的int都是__cmp__()
对我来说似乎很奇怪,所以我想知道为什么会这样.
刚刚测试过,它在python 3中按预期工作,所以我假设有一些遗留原因.仍然希望听到正确的解释;)
我已经使用Python一段时间了,我发现将方法声明为静态的语法是特殊的.
将声明一个常规方法:
def mymethod(self, params)
...
return
Run Code Online (Sandbox Code Playgroud)
声明了一个静态方法:
def mystaticethod(params)
...
return
mystaticmethod = staticmethod(mystaticmethod)
Run Code Online (Sandbox Code Playgroud)
如果您不添加静态方法行,编译器会抱怨自我丢失.
这是一种非常简单的非常简单的方法,在其他语言中只需使用关键字和声明语法.谁能告诉我这种语法的演变?这仅仅是因为课程被添加到现有语言中吗?
由于我可以将staticmethod行移动到类的后期,因此它还表明解析器在簿记方面的工作量更大.
请注意,我知道稍后添加的装饰器语法,我很想知道从语言设计角度来看原始语法是如何产生的.我能想到的唯一想法是staticmethod应用程序调用一个将函数对象转换为静态方法的操作.
Perl 1.0(1987年12月18日)的首次公开发布与目前的稳定版本5.10.1(2009)之间已有22年的历史.
在这22年中,发布了以下重要版本:
我正在寻找Perl历史中反向不兼容的具体示例.
题:
请尽可能包含参考和代码示例.
我最近发现朋友声明范围遵循极其特殊的规则 - 如果你有一个friend函数或一个尚未声明的类的声明(定义),它会在直接封闭的命名空间中自动声明(定义),但它是不可见的不合格和合格的查询; 但是,友元函数声明通过依赖于参数的查找保持可见.
struct M {
friend void foo();
friend void bar(M);
};
void baz() {
foo(); // error, unqualified lookup cannot find it
::foo(); // error, qualified lookup cannot find it
bar(M()); // ok, thanks to ADL magic
}
Run Code Online (Sandbox Code Playgroud)
如果你看一下标准(参见链接的答案),他们就会付出很大的代价来启用这种古怪的行为,在复杂规则的限定/非限定查找中添加一个特定的例外.最终的结果让我感到非常困惑1,还有另一个案例要添加到实现中.作为
friend声明引用现有名称,期限; 要么似乎更容易实现,指定,最重要的是,理解,我想知道:为什么他们为这个烂摊子烦恼?他们试图覆盖哪些用例?在任何这些更简单的规则下(特别是第二个与现有行为最相似的规则)会破坏什么?
例如,在这种特殊情况下
struct M {
friend class N;
};
N *foo;
typedef int N;
Run Code Online (Sandbox Code Playgroud)
你得到可笑的精神分裂症错误信息
<source>:4:1: error: 'N' does not name …Run Code Online (Sandbox Code Playgroud)