访问地图时,我们习惯于索引运算符。
fun fun1(map: Map<*, *>) {
assert(map.get("key") === map["key"])
}
但是为什么索引运算符不能用于可为null的Map? 以下代码无法编译。
fun fun2(map: Map<*, *>?) {
assert(map?.get("key") === map?["key"])
}
^^^
答案 0 :(得分:1)
为什么Kotlin不允许使用空安全索引操作符?
不能使用my_list=['arnold', 'matt', 'david', 'james']
found = False
search_item = input("type a name to find")
start_range = 0
end_range = len(my_list)
while found == False and start_range <= end_range:
mid = (start_range + end_range) //2
if search_item == my_list[mid]:
found == True
print("item found")
else:
if my_list[mid] >= search_item:
end_range = mid -1
else:
start_range = mid +1
if found == False:
print("item not found")
的原因是不支持的语法。这是一个长期存在的功能要求。这是一个有4年历史的期刊:
https://youtrack.jetbrains.com/issue/KT-8799
请使用等效的方法语法,即map?.[K]
而不是map.get(T)
,即您首先拥有的语法:
map[T]
您可以在official docs中发现fun fun2(map: Map<*, *>?) {
assert(map?.get("key") === map?.get("key"))
}
是实现.get()
运算符的原因。换句话说,编译器会将[]
转换为幕后的[]
,因此在这种情况下,您最好直接调用它。