私は、配列をlua関数の引数として渡すFortranの例(インタフェース関数も)を探しています。私はfortlua projectを使い始めることができました。しかし、与えられた例は一度に1つの要素を渡します。助けをお待ちしています。Fortranからの関数の引数として配列をluaに渡す
--Lua code
local q1
local q2
function getoutput(qout1, qout2)
-- qout1 and qout2 are arrays with some dimension
q1 = qout1
q2 = qout2
end
は - FORTRANで私は
config_function('getoutput', args, 2, cstatus)
を使用しかし、引数を設定し、私はいくつかの助けを探していますところです。次のコードは、スカラー引数変数のための仕事を私が推測する配列ではありません。ここでは、私のコメントに少しを拡大する
!> Evaluate a function in the config file and get its result.
FUNCTION config_function(name,args,nargs,status)
REAL :: config_function
CHARACTER(LEN=*) :: name
REAL, DIMENSION(nargs) :: args
REAL(KIND=c_double) :: anarg
INTEGER :: nargs
INTEGER :: status
INTEGER :: iargs
INTEGER(c_int) :: stackstart
stackstart = lua_gettop(mluastate)
config_function = 0
status = 0
CALL lua_getglobal(mluastate,TRIM(name)//C_NULL_CHAR)
IF (lua_type(mluastate,-1) .eq. LUA_TFUNCTION) THEN
DO iargs = 1,nargs
anarg = args(iargs)
CALL lua_pushnumber(mluastate,anarg)
ENDDO
IF (lua_pcall(mluastate,nargs,1,0) .eq. 0) THEN
if (lua_isnumber(mluastate,-1) .ne. 0) THEN
config_function = lua_tonumber(mluastate,-1)
CALL lua_settop(mluastate,-2)
ELSE
! Nothing to pop here
status=-3
ENDIF
ELSE
CALL lua_settop(mluastate,-2)
status=-2
ENDIF
ELSE
CALL lua_settop(mluastate,-2)
status=-1
ENDIF
IF (stackstart .ne. lua_gettop(mluastate)) THEN
WRITE(*,*) 'The stack is a different size coming out of config_function'
ENDIF
END FUNCTION config_function
Fortranのすべての質問について、tag [tag:fortran]を使用してください。 –
テーブルに物を押し込んで、このテーブルを関数に渡すことができます。しかし、おそらく要素を1つずつテーブルにプッシュすることになります。私は、あなたが大量のデータを調べているなら、かなり複雑になるかもしれないが、userdataを使うほうが良いかもしれないと思う。 aotusでは、個々のスカラをスタックに置くこともできますが、任意の数の要素にループすることができます:https://geb.sts.nt.uni-siegen.de/doxy/aotus/module/aot_fun_module.html – haraldkl