标签: language-specifications

Python中的False == 0和True == 1是一个实现细节还是由语言保证?

难道保证False == 0True == 1,在Python(假设他们没有被用户重新分配)?例如,无论Python的版本(现有的,可能的,未来的版本)是什么,它是否以任何方式保证以下代码将始终产生相同的结果?

0 == False  # True
1 == True   # True
['zero', 'one'][False]  # is 'zero'
Run Code Online (Sandbox Code Playgroud)

任何对官方文档的引用都将非常感谢!

编辑:正如许多答案所述,bool继承自int.因此,问题可以改写为:"文档是否正式表明程序员可以依赖于从整数继承的布尔值,以及值01?".这个问题与编写由于实现细节而不会失败的健壮代码有关!

python boolean equality language-specifications

230
推荐指数
3
解决办法
23万
查看次数

C#short/long/int文字格式?

在C/C#/等中,你可以告诉编译器一个字面数字不是它看起来的样子(即float代替double,unsigned long而不是int:

var d = 1.0; // double
var f = 1.0f; // float
var u = 1UL; // unsigned long
Run Code Online (Sandbox Code Playgroud)

等等

有人能指出我这些的清单吗?我特意为short或寻找后缀Int16.

c# literals language-specifications

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

你能为Python的语法添加新的语句吗?

你可以添加新的语句(例如print,raise,with)Python的语法?

说,允许..

mystatement "Something"
Run Code Online (Sandbox Code Playgroud)

要么,

new_if True:
    print "example"
Run Code Online (Sandbox Code Playgroud)

如果你应该,而不是如果它是可能的(没有修改python解释器代码)

python syntax language-specifications

118
推荐指数
6
解决办法
2万
查看次数

我在哪里可以找到C#语言规范6.0?

我知道在哪里可以找到C#5语言规范,但我无法在任何地方找到C#6语言规范.

C#6语言规范在哪里?

c# language-specifications c#-6.0 visual-studio-2015

84
推荐指数
2
解决办法
8888
查看次数

如在语言规范中描述的那样理解C#类型推断的问题

C#语言规范描述键入第7.5.2节推断.其中有一个我不明白的细节.考虑以下情况:

// declaration
void Method<T>(T obj, Func<string, T> func);

// call
Method("obj", s => (object) s);
Run Code Online (Sandbox Code Playgroud)

Microsoft和Mono C#编译器都正确推断T= object,但我对规范中算法的理解会产生T= string然后失败.以下是我的理解:

第一阶段

  • 如果Ei是匿名函数,则从Ei到Ti 进行显式参数类型推断(第7.5.2.7节)

    ⇒没有效果,因为lambda表达式没有明确的参数类型.对?

  • 否则,如果Ei具有类型U并且xi是值参数,则从U到Ti进行下限推断.

    ⇒第一个参数是静态类型string,所以这会增加string下限T,对吧?

第二阶段

  • 所有不固定的类型变量Xi不依赖于(§7.5.2.5)任何Xj是固定的(§7.5.2.10).

    T是不固定的; T不依赖于任何东西......所以T应该修复,对吗?

§7.5.2.11修复

  • 候选类型Uj的集合开始于Xi的边界集合中的所有类型的集合.

    ⇒{ string(下界)}

  • 然后我们依次检查Xi的每个边界:[...]对于Xi的每个下界U,从候选集中移除没有从U隐式转换的所有类型Uj.[...]

    ⇒不会从候选集中删除任何内容,对吗?

  • 如果在剩余的候选类型Uj中存在唯一的类型V,其中存在对所有其他候选类型的隐式转换,则Xi被固定为V.

    ⇒因为只有一种候选类型,所以这是真实的,所以Xi固定为string.对?


那我哪里错了?

c# language-features type-inference language-specifications

62
推荐指数
1
解决办法
1115
查看次数

在PHP中导入类和命名空间:领先的反斜杠有什么区别?

这两者有什么区别:

use Exception;
use \Exception;
Run Code Online (Sandbox Code Playgroud)

或那些:

use Foo\Bar;
use \Foo\Bar;
Run Code Online (Sandbox Code Playgroud)

手册说:

请注意,对于名称空间名称(包含名称空间分隔符的完全限定名称空间名称,例如Foo\Bar而不是全局名称,例如FooBar),前导反斜杠是不必要的,不允许,因为导入名称必须是完全限定的,并且不会相对于当前名称空间进行处理.

但我并不是真的理解这一点,因为所有上述变种都有效,即它绝对不是"不允许".

看看zend_do_use显示,is_global(设置,当有前导反斜杠时)仅用于以下情况中的警告:

namespace {
    use Exception;
}
Run Code Online (Sandbox Code Playgroud)

这告诉我:"具有非复合名称的'使用声明'异常'无效".(虽然做同样的事情use \Exception会产生很小的影响,但不会发出警告.)

那么:我错过了什么吗?实际上有什么区别吗?

php import namespaces language-specifications

45
推荐指数
3
解决办法
1万
查看次数

我在哪里可以找到C#5语言规范?

C#5.0自2012年8月开始推出.我在哪里可以找到规格?他们已经停止了ECMA规范,但MSDN怎么样?

c# language-specifications c#-5.0

39
推荐指数
2
解决办法
1万
查看次数

Python的任何/所有显式的短路行为是什么?

这里的讨论提示

文档建议为的行为的一些等价代码allany

是否应将等效代码的行为视为定义的一部分,或者实现是否可以以非短路方式实现它们?

以下是cpython/Lib/test/test_builtin.py的相关摘录

def test_all(self):
    self.assertEqual(all([2, 4, 6]), True)
    self.assertEqual(all([2, None, 6]), False)
    self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
    self.assertRaises(RuntimeError, all, TestFailingIter())
    self.assertRaises(TypeError, all, 10)               # Non-iterable
    self.assertRaises(TypeError, all)                   # No args
    self.assertRaises(TypeError, all, [2, 4, 6], [])    # Too many args
    self.assertEqual(all([]), True)                     # Empty iterator
    S = [50, 60]
    self.assertEqual(all(x > 42 for x in S), True)
    S = [50, 40, 60]
    self.assertEqual(all(x > 42 for x in S), False)

def test_any(self): …
Run Code Online (Sandbox Code Playgroud)

python short-circuiting language-specifications

36
推荐指数
3
解决办法
4867
查看次数

Inconsistent "possible lossy conversion from int to byte" compile-time error

Examine the following code snippets:

Snippet #1

int a=20;
int b=30;
byte c= (a>b)? 20:30;
Run Code Online (Sandbox Code Playgroud)
Error:
incompatible types: possible lossy conversion from int to byte
byte c= (a>b)? 20:30;
Run Code Online (Sandbox Code Playgroud)

Snippet #2

int a=20;
int b=30;
byte h1=70;
byte c= (a>b)? 20:h1;
Run Code Online (Sandbox Code Playgroud)

Snippet #3

int a=20;
int b=30;
byte h1=70;
byte h2=89;
byte c= (a>b)? h1:h2;
Run Code Online (Sandbox Code Playgroud)

Snippet #4

byte c= (true)? 20:30;
Run Code Online (Sandbox Code Playgroud)

All of these compile fine except for Snippet #1. How is this behavior justified? If Snippet #1 produces the …

java compiler-errors language-specifications

30
推荐指数
2
解决办法
1295
查看次数

为什么C#不允许通用属性?

我想知道为什么我不能在非泛型类中拥有泛型属性,就像我可以使用泛型方法一样.即:

public interface TestClass
{
   IEnumerable<T> GetAllBy<T>(); //this works

   IEnumerable<T> All<T> { get; } //this does not work
}
Run Code Online (Sandbox Code Playgroud)

我读了@Jon Skeet的回答,但这只是一个声明,很可能是规范中的某个地方.

我的问题是为什么它实际上是这样的?这种限制是否避免了一些问题?

c# language-design language-specifications

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