Fortran がスカラー式を式では配列にプロモートするのに、プロシージャの引数としてプロモートしないのはなぜですか? 特に、標準化団体はなぜこの設計上の決定を下したのでしょうか? あいまいさだけが原因で、プロシージャをオーバーロードする必要がありますか? その状況でのエラー メッセージは別のアプローチになるでしょうか?
たとえば、次のコードでは、最後のステートメントx = foo(7)
が GFortran エラーを生成しますError: Rank mismatch in argument 'a' at (1) (1 and 0)
。
module m
public :: foo
contains
function foo(a) result(b)
integer, dimension(:) :: a
integer, dimension(size(a)) :: b
b = a+1
end function foo
end module m
program p
use m
integer, dimension(4) :: x
integer, parameter, dimension(4) :: y = (/1,2,3,4/)
x = 7
x = foo(x)
x = foo(y)
x = foo(x + 7)
x = foo(7)
end program p
この質問では、配列の代入によってスカラー値のソースが配列のターゲットにプロモートされる理由について尋ねるべきでした。配列関数とは異なります。ただし、これは単に便利な特殊なケースだと思います。以下の物乞いのキャップで感謝して受け取ったコメント。