如果我在我的类中创建一个bool,就像它一样bool check,它默认为false.
当我在我的方法中创建相同的bool时bool check(而不是在类中),我得到一个错误"使用未分配的局部变量检查".为什么?
在过去的几个月里,我一直在与Lua打交道,我非常喜欢大部分的功能,但我仍然缺少其中的一些东西:
continue?给出一个简单的switch语句
switch (int)
{
case 1 :
{
printf("1\n");
break;
}
case 2 :
{
printf("2\n");
}
case 3 :
{
printf("3\n");
}
}
Run Code Online (Sandbox Code Playgroud)
在案例2中没有break语句意味着在案例3的代码中将继续执行.这不是偶然的; 它是这样设计的.为什么做出这个决定?这提供了什么好处与块的自动中断语义?理由是什么?
在我阅读本文之前,我认为Ruby中的访问控制工作方式如下:
public- 可以被任何对象访问(例如Obj.new.public_method)protected - 只能从对象本身以及任何子类中访问private - 与protected相同,但子类中不存在该方法但是,看起来protected并且private行为相同,除了你不能private用显式接收器调用方法(即self.protected_method工作,但self.private_method没有).
这有什么意义?什么时候你不希望你的方法用显式接收器调用?
在C#和Java(以及可能的其他语言)中,在"try"块中声明的变量不在相应的"catch"或"finally"块的范围内.例如,以下代码无法编译:
try {
String s = "test";
// (more code...)
}
catch {
Console.Out.WriteLine(s); //Java fans: think "System.out.println" here instead
}
Run Code Online (Sandbox Code Playgroud)
在此代码中,catch块中对s的引用发生编译时错误,因为s仅在try块的范围内.(在Java中,编译错误是"s无法解决";在C#中,它是"当前上下文中不存在名称".)
这个问题的一般解决方案似乎是在try块之前而不是try块中声明变量:
String s;
try {
s = "test";
// (more code...)
}
catch {
Console.Out.WriteLine(s); //Java fans: think "System.out.println" here instead
}
Run Code Online (Sandbox Code Playgroud)
然而,至少在我看来,(1)这感觉就像一个笨重的解决方案,并且(2)它导致变量具有比程序员预期更大的范围(方法的整个剩余部分,而不仅仅是在的try-catch-最后).
我的问题是,这种语言设计决策背后的原理是什么(在Java中,在C#中,和/或在任何其他适用的语言中)?
前/后递增/递减运算符(++和--)是非常标准的编程语言语法(至少对于过程语言和面向对象语言).
为什么Ruby不支持它们?我知道你可以用+=和完成同样的事情-=,但是排除这样的东西似乎有点奇怪,特别是因为它是如此简洁和传统.
例:
i = 0 #=> 0
i += 1 #=> 1
i #=> 1
i++ #=> expect 2, but as far as I can tell,
#=> irb ignores the second + and waits for a second number to add to i
Run Code Online (Sandbox Code Playgroud)
我理解Fixnum是不可改变的,但如果+=能够实现一个新的Fixnum并设置它,为什么不做同样的事情++呢?
包含=角色的作业的一致性是唯一的原因,还是我错过了什么?
我在回答问题时曾与一位新的C++开发人员合作:"为什么变量名称不能以数字开头?"
我无法想出答案,除了一些数字可以包含文本(123456L,123456U),如果编译器认为所有带有一些字母字符的数字都是变量名称,那就不可能.
这是正确的答案吗?还有其他原因吗?
string 2BeOrNot2Be = "that is the question"; // Why won't this compile?
Run Code Online (Sandbox Code Playgroud) c++ variables programming-languages language-design variable-names
我从来没有真正理解为什么C++需要一个单独的头文件,其功能与.cpp文件相同.它使创建类和重构它们变得非常困难,并且它为项目添加了不必要的文件.然后是必须包含头文件的问题,但必须明确检查它是否已被包含.
C++于1998年获得批准,那为什么这样设计呢?单独的头文件有哪些优点?
当我包含的所有内容都是.h文件时,编译器如何找到带有代码的.cpp文件?是否假设.cpp文件与.h文件具有相同的名称,或者它是否实际查看目录树中的所有文件?
我想做:
award_dict = {
"url" : "http://facebook.com",
"imageurl" : "http://farm4.static.flickr.com/3431/3939267074_feb9eb19b1_o.png",
"count" : 1,
}
def award(name, count, points, desc_string, my_size, parent) :
if my_size > count :
a = {
"name" : name,
"description" : desc_string % count,
"points" : points,
"parent_award" : parent,
}
a.update(award_dict)
return self.add_award(a, siteAlias, alias).award
Run Code Online (Sandbox Code Playgroud)
但是如果觉得这个功能真的很麻烦,我宁愿做到:
return self.add_award({
"name" : name,
"description" : desc_string % count,
"points" : points,
"parent_award" : parent,
}.update(award_dict), siteAlias, alias).award
Run Code Online (Sandbox Code Playgroud)
为什么不更新返回对象以便链接?
JQuery这样做是为了链接.为什么python不接受它?
我只是想知道为什么Java 7 switch语句不支持一个null案例而是抛出NullPointerException?请参阅下面的注释行(示例摘自Java Tutorials文章switch):
{
String month = null;
switch (month) {
case "january":
monthNumber = 1;
break;
case "february":
monthNumber = 2;
break;
case "march":
monthNumber = 3;
break;
//case null:
default:
monthNumber = 0;
break;
}
return monthNumber;
}
Run Code Online (Sandbox Code Playgroud)
这样可以避免if在每次switch使用之前进行空检查的条件.