为一篇冗长的帖子道歉,但我需要发布一些代码来说明问题.
灵感来自问题*什么是不使用选择的原因?,我决定指出一些我之前注意到的select*行为的观察结果.
让我们的代码说明一切:
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[starTest]') AND type in (N'U'))
DROP TABLE [dbo].[starTest]
CREATE TABLE [dbo].[starTest](
[id] [int] IDENTITY(1,1) NOT NULL,
[A] [varchar](50) NULL,
[B] [varchar](50) NULL,
[C] [varchar](50) NULL
) ON [PRIMARY]
GO
insert into dbo.starTest(a,b,c)
select 'a1','b1','c1'
union all select 'a2','b2','c2'
union all select 'a3','b3','c3'
go
IF EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[vStartest]'))
DROP VIEW [dbo].[vStartest]
go
create view dbo.vStartest as
select * from dbo.starTest …Run Code Online (Sandbox Code Playgroud) 请考虑以下代码:
#include <stdio.h>
int main(void)
{
int a[10];
printf("%d",(int)sizeof(a)); //prints 10*sizeof(int) (40 on my compiler)
printf("%d",(int)sizeof(a-3)); //prints sizeof(int) (4 on my compiler)
}
Run Code Online (Sandbox Code Playgroud)
我知道这sizeof()是一个编译时运算符,但我很惊讶地看到第二个输出printf().可能是什么原因?是否存在sizeof()从数组类型到整数类型的参数的隐式转换?
我注意到我可以使用==运算符来比较所有本机数据类型(整数,字符串,布尔值,浮点数等)以及包含本机数据类型的列表,元组,集和字典.在这些情况下,==操作员检查两个对象是否相等.但在其他一些情况下(尝试比较我创建的类的实例),==运算符只检查两个变量是否引用相同的对象(因此在这些情况下,==运算符等同于is运算符)
我的问题是:==运营商什么时候做的不仅仅是比较身份?
编辑:我正在使用Python 3
我刚观看了Douglas Crockford关于2009年着作"JavaScript:The Good Parts"的演讲视频.
在视频中,他解释说以下块是危险的,因为它会产生无声错误:
return
{
ok: false
};
Run Code Online (Sandbox Code Playgroud)
它实际上应该这样写(强调虽然看似相同,但行为差异至关重要):
return {
ok: false
};
Run Code Online (Sandbox Code Playgroud)
你可以在32分钟左右看到他的评论:http://www.youtube.com/watch?v = hQVTIJBZook&feature = player_embedded#!&start = 1920
我以前没有听过这个,并且想知道这个规则是否仍然适用,或者自从这个陈述发表以来JavaScript语言的这种要求是否被克服了.
我发现这非常有趣,因为我没有以这种方式编写代码,并想检查这些信息是否已过时.
我只是想检查编译器是否允许类型名称作为变量名称.我试过的时候
int int;
Run Code Online (Sandbox Code Playgroud)
它报告了一个错误说
错误C2632:'int'后跟'int'是非法的
但是当我尝试的时候
#include <string>
using namespace std;
int main()
{
string string;
}
Run Code Online (Sandbox Code Playgroud)
它没有给出任何错误.这两个string和int是数据类型.
为什么编译器允许string但不允许int?
编辑:包括更新.
编辑:有些人说int不是一个类.在这种情况下,为什么允许下面的行.
int a(10);
Run Code Online (Sandbox Code Playgroud)
它的工作方式类似于类的构造函数.
这是一种不好的做法吗?
喜欢:
function boo(){
require_once("class.moo.php");
}
...
Run Code Online (Sandbox Code Playgroud)
?
我有一些代码:
int value = 5;
MessageBox.Show ( value );
Run Code Online (Sandbox Code Playgroud)
并MessageBox.Show抱怨说:
"无法从'int'转换为'string'"
我似乎记得一些情况,其中值似乎被隐式转换为字符串值,但无法准确地回忆它们.
这个决定背后的原因是什么,任何值都不能隐式转换为字符串值?
为什么Python intern内置仅用于字符串?应该可以扩展intern到可清除和可比较的类,对吗?
我目前正在玩编程语言.我花了一些时间用高级语言编写解析器和解释器(最值得注意的是haXe).
我有一些结果,我认为实际上非常好,但现在我想让它们快速.
我的想法是将输入语言翻译成C.
我的C知识仅限于你在大学学到的知识.除了一些练习,我从未编写过实际的C程序.但我相信我能让它发挥作用.
当然,我可以尝试为LLVM编写前端或生成MSIL或JVM字节码.但我觉得现在学到的东西太多了,实际上并没有看到太大的收获.
C也完全是人类可读的,所以如果我搞砸了,理解其中的原因要容易得多.毕竟,C是高水平的.我可以真正地从输入语言中翻译概念,而不需要过多的思维弯曲.我应该在合理的时间内完成一些工作并运行,然后根据需要对其进行优化.
那么:使用C有什么缺点吗?你能推荐另一种选择吗?
感谢您的见解 :)
编辑:一些澄清
我发现这部分答案真的令人困惑.大多数答案都是一些基本规则的特例,例如"333" + "222" == "333222" but "333" - "222" = 111javascript,其中使用+字符串连接很有用.
$[- 将阵列基础从0基础更改为基于1基于42基础:WHEEE!
基于42的阵列索引的用例是什么?只是一个搭便车的银河参考指南/令人难以置信的邪恶复活节彩蛋,或实际上有用吗?