如何解决为什么在这里需要接口才能获得正确的结果
考虑代码:
public function handle() {
$repos = GitHub::connection('main')->me()->repositories();
foreach($repos as $repo) {
$name = str_replace(".","-",$repo["name"]);
Project::whereNotIn('name',$name)->delete();
DB::table('projects')
->updateOrInsert(
['name' => $name],[
'name' => $name,'html_url' => $repo["html_url"],'description' => $repo["description"],'stargazers_count' => $repo["stargazers_count"],'language' => $repo["language"],]
);
}
}
它显示npm install uuid
,这当然是错误的。仅当我添加一个显式接口时,它才会输出正确的结果:
const { v4: uuidv4 } = require('uuid');
list.forEach(el=> el.id = uuidv4());
然后我得到正确的subroutine func(i) bind(c)
use,intrinsic :: ISO_C_BINDING,only: c_float
implicit none
real(c_float),value :: i
print *,i,"+","=",i + i
end subroutine
program main
use,only: c_float
implicit none
real(c_float) :: i = 1.0
call func(i)
end program
。
但这是什么导致错误?为什么需要一个不需要添加任何新信息的额外接口?
我使用gfortran,GCC版本7.4.0
解决方法
每个具有value
伪参数的函数或子例程都需要一个显式接口。具有bind()
属性的过程也是如此。否则,调用代码不知道如何正确调用它。
Fortran 2018草案规定:
15.4.2.2 显式界面
1在过程标识符的范围内,该过程应具有显式接口(如果存在) 不是声明函数,
...
(3)程序有 假参数(a)具有ALLOCATABLE,ASYNCHRONOUS,OPTIONAL, POINTER,TARGET, VALUE 或VOLATILE属性,...
...
(6)该过程具有 BIND 属性。
请注意,explicit interface与您使用的interface
块不同。接口块是如何提供显式接口的可能方式之一。更好的选择通常是使用模块,有时使用内部过程。
该标准将显式接口定义为:
3.90.2
明确的界面
过程的接口,包括该过程的所有特征以及其伪参数的名称 星号虚拟参数(15.4.2)除外
这与interface
块的形式不同,后者是以interface
关键字开头的实际代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。