我正在将代码从 Python 翻译为 Julia。我有以下数组:
_DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
Run Code Online (Sandbox Code Playgroud)
以及以下代码行:
_DAYS_IN_MONTH[index] - _DAYS_IN_MONTH[index - 1]
Run Code Online (Sandbox Code Playgroud)
这个想法是,如果index - 1计算结果为 -1,那么我们将获得数组的最后一个元素,这正是我们在本例中所需要的。然而,这在 Julia 中不起作用。当然,我可以写这样的东西:
if index == 1
_DAYS_IN_MONTH[index] - _DAYS_IN_MONTH[end]
else
_DAYS_IN_MONTH[index] - _DAYS_IN_MONTH[index - 1]
end
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有一种更优雅和“朱利安”的方式来做到这一点。
在 Julia 中,可以导出模块的函数(或变量、结构等),然后可以在另一个脚本中调用它而无需命名空间(一旦导入)。例如:
# helpers.jl
module helpers
function ordinary_function()
# bla bla bla
end
function exported_function()
# bla bla bla
end
export exported_function()
end
Run Code Online (Sandbox Code Playgroud)
# main.jl
include("helpers.jl")
using .helpers
#we have to call the non-exported function with namespace
helpers.ordinary_function()
#but we can call the exported function without namespace
exported_function()
Run Code Online (Sandbox Code Playgroud)
Python 中有这个功能吗?
我正在浏览这个 Flux.jl 教程并遇到了一个名为Chain.
m = Chain(Dense(10, 5, relu), Dense(5, 2), softmax)
Run Code Online (Sandbox Code Playgroud)
它不是从任何使用的模块导入的,也没有使用命名空间,所以我不知道它属于哪个模块。虽然我设法发现我属于 Flux 包,但我想知道脚本中是否有一种通用的方法可以解决这个问题。
我需要能够比较名为 的结构体的实例Hijri,因此我为该函数定义了一个新方法,isless()如下所示:
function isless(a::Hijri, b::Hijri)
tuple_a = datetuple(a)
tuple_b = datetuple(b)
return tuple_a < tuple_b
end
Run Code Online (Sandbox Code Playgroud)
datetuple()以元组形式返回Hijri结构体的值。
这工作正常:
@show isless(a, b)
Run Code Online (Sandbox Code Playgroud)
然而,这个
@show a < b
Run Code Online (Sandbox Code Playgroud)
抛出错误:
ERROR: LoadError: MethodError: no method matching isless(::Main.HijriConverter.Hijri, ::Main.HijriConverter.Hijri)
Closest candidates are:
isless(::Any, ::Missing) at ~/Downloads/julia-1.7.0/share/julia/base/missing.jl:88
isless(::Missing, ::Any) at ~/Downloads/julia-1.7.0/share/julia/base/missing.jl:87
Stacktrace:
[1] <(x::Main.HijriConverter.Hijri, y::Main.HijriConverter.Hijri)
@ Base ./operators.jl:352
[2] top-level scope
@ show.jl:1047
in expression starting at /home/jafar_isbarov/Documents/projects/hijri/HijriConverter.jl/src/HijriConverter.jl:1
Run Code Online (Sandbox Code Playgroud)
可能是什么原因?