标签: language-design

为什么局部变量需要初始化,但字段不需要?

如果我在我的类中创建一个bool,就像它一样bool check,它默认为false.

当我在我的方法中创建相同的bool时bool check(而不是在类中),我得到一个错误"使用未分配的局部变量检查".为什么?

c# language-design local-variables

139
推荐指数
4
解决办法
2万
查看次数

为什么Lua没有"继续"声明?

在过去的几个月里,我一直在与Lua打交道,我非常喜欢大部分的功能,但我仍然缺少其中的一些东西:

  • 为什么没有continue
  • 它有什么变通方法?

lua loops language-design

135
推荐指数
9
解决办法
10万
查看次数

为什么switch语句需要休息?

给出一个简单的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的代码中将继续执行.这不是偶然的; 它是这样设计的.为什么做出这个决定?这提供了什么好处与块的自动中断语义?理由是什么?

c language-design

134
推荐指数
6
解决办法
7万
查看次数

为什么Ruby有私有和受保护的方法?

在我阅读本文之前,我认为Ruby中的访问控制工作方式如下:

  • public- 可以被任何对象访问(例如Obj.new.public_method)
  • protected - 只能从对象本身以及任何子类中访问
  • private - 与protected相同,但子类中不存在该方法

但是,看起来protected并且private行为相同,除了你不能private用显式接收器调用方法(即self.protected_method工作,但self.private_method没有).

这有什么意义?什么时候你不希望你的方法用显式接收器调用?

ruby language-design access-specifier

134
推荐指数
5
解决办法
4万
查看次数

为什么在"catch"或"finally"范围内的"try"中没有声明变量?

在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#中,和/或在任何其他适用的语言中)?

c# java scope language-design exception

130
推荐指数
8
解决办法
6万
查看次数

为什么Ruby不支持i ++或i--(递增/递减运算符)?

前/后递增/递减运算符(++--)是非常标准的编程语言语法(至少对于过程语言和面向对象语言).

为什么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并设置它,为什么不做同样的事情++呢?

包含=角色的作业的一致性是唯一的原因,还是我错过了什么?

ruby language-design operators

128
推荐指数
4
解决办法
4万
查看次数

为什么变量名不能以数字开头?

我在回答问题时曾与一位新的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

126
推荐指数
10
解决办法
9万
查看次数

为什么C++需要单独的头文件?

我从来没有真正理解为什么C++需要一个单独的头文件,其功能与.cpp文件相同.它使创建类和重构它们变得非常困难,并且它为项目添加了不必要的文件.然后是必须包含头文件的问题,但必须明确检查它是否已被包含.

C++于1998年获得批准,那为什么这样设计呢?单独的头文件有哪些优点?


跟进问题:

当我包含的所有内容都是.h文件时,编译器如何找到带有代码的.cpp文件?是否假设.cpp文件与.h文件具有相同的名称,或者它是否实际查看目录树中的所有文件?

c++ language-design

124
推荐指数
8
解决办法
5万
查看次数

为什么python dict.update()没有返回对象?

我想做:

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不接受它?

python language-features dictionary language-design

119
推荐指数
6
解决办法
4万
查看次数

为什么String switch语句不支持null case?

我只是想知道为什么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使用之前进行空检查的条件.

java language-design switch-statement

115
推荐指数
5
解决办法
4万
查看次数