使用标量和数组进行重载



我想从文本文件中读取数字。可以是标量或数组。

所以要么我调用
real, dimension(2) :: test
call self%ReadRealToVariable('(2F10.0)',test)

real :: test
call self%ReadRealToVariable('(F10.0)',test)

导入函数看起来像

subroutine ReadRealToVariable(self,Format,VarOut)
    implicit none
    ! Declaring Part
    class(FileImporter) :: self
    real, dimension(:), intent(out) :: VarOut
    character(len=*), intent(in) :: Format
    real, dimension(size(VarOut)) :: Value
    ! Executing Part
    call self%ReadValueToVariable(Format,Value)
end subroutine ReadRealToVariable

现在的问题是,当我尝试导入一个标量时,我得到标量和秩(1)之间的维度不匹配。我完全理解为什么会出现这个问题。现在的问题是如何处理它:

  1. 是否有一种方法可以灵活地将变量分配给标量或数组?

  2. 或者我应该简单地将所有标量初始化为real, dimension(1) :: test ?

为了有一个问题的答案,人们可以看到…

1)不,单个例程不能在传递标量时分配标量,也不能在传递数组时分配数组。可以将不同的例程封装在一个泛型接口后面,并使它看起来就好像单个过程按照OP的要求运行一样。这可能已经足够好了。OP似乎已经弄明白了这一点,而且在SO上可能还有其他关于泛型接口的问题,所以我不会在这里写更多关于这个主题的内容。

2)为了编写从文件中读取值的例程,当然可以将标量视为大小为1的第1级数组。我不确定是否有人想要在整个代码库中传播它。另一方面,我可以看到在某些情况下,大小为1的排名为1的数组与大小为0的数组一样有用,例如在没有复杂条件的情况下处理边缘情况。

最新更新