2016-01-10 23 views
-1

为什么这甚至编译?什么是需要一个空的下标,显然行为像一个没有参数的函数?感觉在空下标后面?

extension Array { 
    subscript() -> Int { 
     return 0 
    } 
} 

let array = [1,3,2] 
print(array[]) // "0" 

注意,它也可以用来赋值,所以它的行为就像一个名为[]一个计算性能。

+0

它没有意义,但它不会使它无效Swift代码。没有编译器/语言可以阻止你做所有的无意义的事情 –

+0

为什么它*不*工作?关于*需求* - 你定义它,想想需要。 – luk2302

回答

1

为什么这甚至编译

它编译因为你定义一个空标扩展阵列:

extension Array { 
    subscript() -> Int { 
     return 0 
    } 
} 

阵列已具有标定义,因此您提供的索引号并找回该索引处的元素。此扩展添加另一个下标,从而您不提供任何内容并返回数字零。

没有这种扩展,这将编译:

let array = [1,3,2] 
print(array[]) 

什么是需要一个空的标这明显表现就像一个没有参数的函数

有没有“需要“;这是一个方便。毕竟,对于一般的下标,你可以做出完全相同的“异议”!他们什么都不做,你不能通过方法完成。事实上,这样的方法存在;下标符号仅仅是一个令人愉快的句法糖。