Digamos que tiene un módulo Fortran 90 que contiene lotes de variables, funciones y subrutinas. En su estado de cuenta USE
, que la convención usted sigue:¿Cómo se utilizan datos del módulo Fortran 90?
- explícitamente declarar las variables que/funciones/subrutinas que está utilizando con la sintaxis
, only :
, comoUSE [module_name], only : variable1, variable2, ...
? - Insertar una manta
USE [module_name]
?
Por un lado, la cláusula only
hace que el código sea un poco más detallado. Sin embargo, te obliga a repetirte en el código y si tu módulo contiene lotes de variables/funciones/subrutinas, las cosas comienzan a parecer ingobernables.
He aquí un ejemplo:
module constants
implicit none
real, parameter :: PI=3.14
real, parameter :: E=2.71828183
integer, parameter :: answer=42
real, parameter :: earthRadiusMeters=6.38e6
end module constants
program test
! Option #1: blanket "use constants"
! use constants
! Option #2: Specify EACH variable you wish to use.
use constants, only : PI,E,answer,earthRadiusMeters
implicit none
write(6,*) "Hello world. Here are some constants:"
write(6,*) PI, &
E, &
answer, &
earthRadiusInMeters
end program test
actualización Esperemos que alguien dice algo así como "Fortran Sólo recodificar en C#?!" así puedo votar por ti.
actualización
me gusta Tim Whitcomb's answer, que se compara de Fortran USE modulename
con Python de from modulename import *
. Un tema que ha estado en desbordamiento de pila antes:
‘import module’ or ‘from module import’
- In an answer, Mark Roddy mencionó:
no usan 'del módulo de importación *'. Para cualquier conjunto grande razonable de código, si 'importa *' es probable que sea que lo cementa en el módulo, no se puede eliminar . Esto se debe a que es difícil determinar qué elementos utilizados en el código vienen de 'módulo', por lo que es al este para llegar al punto de donde cree que no utiliza la importación más, pero su extremadamente difícil para estar seguro.
- In an answer, Mark Roddy mencionó:
What are good rules of thumb for python imports?
- dbr's answer contiene
no lo haga desde x importación * - que hace su código muy difícil de entender, ya que no se puede ver fácilmente dónde un método provino de (de x import *; from y import *; my_func() - where is my_func definido?)
- dbr's answer contiene
lo tanto, me estoy inclinando hacia un consenso de establecer explícitamente todos los artículos que estoy usando en un módulo a través
USE modulename, only : var1, var2, ...
Y como Stefano Borini mentions,
[si] tiene un módulo tan grande que se siente obligado a agregar SOLAMENTE, significa que su módulo es demasiado grande. Dividirlo.
Uno de los problemas con Fortran es que cuando importas desde módulos siempre lanzarás todo en el espacio de nombres global, como en Javascript. En python, puedes hacerlo desde foo.bar import *, pero también desde foo import bar. En Fortran, no tienes elección. Cada vez que usa USE, realiza una importación * e incluye todo en el espacio de nombres global. Este es uno de los peores problemas de Fortran 9X. –
@StefanoBorini: ¿esa última frase implica que el problema se resuelve en versiones fortran más recientes? – naught101
@ naught101 nope –