在Ada中有三種傳遞參數的「正常」模式:in
,out
和in out
。 但是接下來有第四種模式,access
... 有什麼需要的地方? (即,否則將是不可能的)`access`參數模式的用處是什麼?
現在,我知道GNAT JVM Ada編譯器在導入的[庫]規範中使用它們非常繁重。 (另外,它們可以被看作是C/C++翻譯必不可少的東西。)
在Ada中有三種傳遞參數的「正常」模式:in
,out
和in out
。 但是接下來有第四種模式,access
... 有什麼需要的地方? (即,否則將是不可能的)`access`參數模式的用處是什麼?
現在,我知道GNAT JVM Ada編譯器在導入的[庫]規範中使用它們非常繁重。 (另外,它們可以被看作是C/C++翻譯必不可少的東西。)
訪問模式的主要驅動之一是解決了Ada 2012之前的功能參數只能是模式'in'。
因此,儘管仍有可能存在合適解決方案的區域,或許還需要綁定,但Ada 2012對允許的功能參數模式的放寬現在包含'進入'可能會顯着減少對訪問模式的需求。
無論有什麼其他用途,我都喜歡在編寫綁定到C API的指針時使用它們(當且僅當0不是C方的該參數的有效值時)。
這種方式在Ada方面我可以處理一個漂亮的對象,而不是一個凌亂的容易出錯的指針。
當然,您可以在綁定中指定該參數是通過引用傳遞的,這會得到相同的結果。
我喜歡這個答案,但用c-side/Ada方面的例子會更好。 – Shark8
您現在不得不說'not null access'以獲得空排除。 –
在我最新的項目,唯一的一次,我需要使用access
到目前爲止是定義我自己的流子程序(Read
,Write
,X'Class'Output
等等,等等)時。這些功能需要not null access Ada.Streams.Root_Stream_Type'Class
作爲參數。
例如:
package Example is
type Printable_Type is private;
procedure Print_Printable(
Stream : not null access Ada.Streams.Root_Stream_Type'Class;
Print : in Printable_Type);
for Printable_Type'Write use Print_Printable;
end Example
我已經玩過流媒體閱讀和寫作 - 它確實是一個方便的工具(但我希望我在這方面做得更好)。 – Shark8
顯然,他們在做什麼阿達稱指針。這可以理解爲使用它們創建與C庫的綁定是最容易的。 – millimoose
@millimoose:對,'access'不是參數模式。 –