我在分配时使用自动分配来计算两个数组的差,边界从0开始:
import { Link } from 'react-router-dom';
import Link1 from 'my-components-repo/path/Link';
...
<Link to="/">Works</Link>
<Link1 to="/">Doesn't work</Link1>
gfortran和ifort都给出输出:
program main
implicit none
integer, allocatable :: a(:), b(:), c(:)
allocate(a(0:10))
allocate(b(0:10))
a = 1
b = 2
write (*,*) lbound(a)
write (*,*) lbound(b)
c = b - a
write (*,*) lbound(c)
end program main
为什么c的边界与a和b的边界相同?是否有一种简短且简洁的方法(无需显式分配)来确保c具有相同的边界?
答案 0 :(得分:3)
考虑一个内部赋值语句,其中左侧未分配,而是一个数组:
variable = expr
在这种情况下,数组variable
被分配为表达式expr
的形状,下界等于LBOUND(expr)
的值(请参见Fortran 2018 10.2.1.3)
以问题为例
c = b - a
右侧是表达式b-a
。对于此表达式,LBOUND(b-a)
等于1:b-a
不是整个数组(F2018 16.9.109)。 c
的分配下限因此为1。
内部分配中分配给变量的下界不为1的唯一方法是使右侧的下界不为1。在分配中(c
未分配)
c = b
然后c
的下界为b
。
您可以避免使用以下显式分配语句
c = b
c = c - a
但是这还不清楚,(如果要重复弗拉基米尔F的观点,您是否希望下限是b
或a
的下限(如果两者不同)。
出于完整性考虑:
allocate(c(7:17), source=b-a)
答案 1 :(得分:2)
为什么c没有和und b一样的边界?
因为它将被分配为与a
和b
相同的形状,并且从1开始。(无论如何b-a
是一个表达式,它也从1开始,但是它是不重要,如果b
和a
从不同的索引处开始怎么办?)
是否存在一种简短且简洁的方法(无需显式分配)来确保c具有相同的边界?
不。但是您至少可以显式分配mold=a
或source=a
。