[英]semantic of having to declare an attached local into detachable attribute with mandatory check
據我了解, then
的check
是強制性的。
那么,必須聲明一個局部變量以避免編譯錯誤( object could be void
)的語義是什么?
detachable dog: DOG
take_a_walk
do
check
attached_dog: attached dog as l_dog
then
leash (l_dog) -- why not just leash (dog)?
walk
end
end
有兩個主要原因可解釋為什么在附加了空性測試后無法使用可分離類型的屬性:
一旦在無效性測試之后進行的一系列調用涉及的不僅僅是單個調用,幾乎就無法確定該屬性是否仍附加。 這是一個具有x
屬性的示例:
if attached x then foo x.bar end
對foo
的調用可以將Void
分配給屬性x
。 因此,調用x.bar
現在不安全(可能導致對Void
目標的調用)。 用語言來講,無論較早的空隙度測試如何, x
都應視為可分離的。 (將此與當x
是局部變量時的使用進行比較:對foo
的調用不能更改x
,並且對x.bar
的調用是可以的。)
在多線程環境中,可以在后台更改屬性的值。 讓我們考慮以下帶有屬性x
示例:
if attached x then x.bar end
這是導致問題的執行順序:
x
的虛度, attached x
給出True
。 x := Void
。 Void
目標上執行x.bar
調用。 如示例1所示,如果x
是局部變量,則代碼就可以了。
以上所有推理均假定可以為屬性分配Void
。 如果這是錯誤的,即不可能進行此類分配怎么辦? 在這種情況下,可以將屬性標記為stable
:
x: detachable FOO
note
option: stable
attribute
end
然后,就無效性安全性而言,該屬性充當局部變量,以上所有代碼段均有效並且可以正確編譯。
因為該屬性可能在另一個線程中被設置為void
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.