首页 > 解决方案 > 当参数可能是两种类型之一时如何声明(和传递)Julia函数参数

问题描述

我的目标是将IOStream变量传递给 Julia 函数(如果我想写入打开的文件),或者nothing(或者可能会被视为空值或空值的其他东西)。原因是我可能会多次调用此函数,并且无论我进入该函数多少次都希望保持文件句柄打开。如果意图不是写入文件,我会简单地nothing 向函数传递不要尝试写入文件的指示。

我试过声明为:

function f(x, y, f)

并作为:

function f(x, y, f::IOStream)

并作为:

function f(x, y, f::Any)

同时将变量集传递给一个nothing或一个IOStream结果

open("filename.txt", "a")

陈述。在所有情况下,我都会遇到某种错误。是否有其他方法可以实现我的目标,或者我应该使用不同类型的函数声明/调用?

标签: functionparametersjulia

解决方案


函数和参数的名称不应相同。无论如何,有两种方法 - 您使用类型Union或多重调度。

因此,您的代码可以是:

function f(x, y, fs::Union{IOStream,Nothing}=nothing)
    #code goes here
end

或者你可以这样做:

function f(x, y, fs::IOStream)
    #code goes here
end
function f(x, y, fs::Nothing)
    #code goes here
end

而不是第二个功能,你也可以这样做:

function f(x, y)
    #code goes here
end

推荐阅读