我有一个需要 DateTime 参数的函数。一种可能性是用户可能会提供 ZonedDateTime 参数。据我所知,有三种可能的方法可以在不中断的情况下捕获它:
- 在一个方法中接受两个参数,并在必要时通过 if... 语句执行类型转换
function ofdatetime(dt::AbstractDateTime)
if dt::ZonedDateTime
dt = DateTime(dt, UTC)
end
...
end
- 定义第二个方法,它简单地转换类型并调用第一个方法
function ofdatetime(dt::DateTime)
...
end
function ofdatetime(dt::ZonedDateTime)
dt = DateTime(dt, UTC)
return ofdatetime(dt)
end
- 为第二种方法重新定义整个函数体
function ofdatetime(dt::DateTime)
...
end
function ofdatetime(dt::ZonedDateTime)
dt = DateTime(dt, UTC)
...
end
当然,当不同的参数类型暗示函数实际上做了不同的事情时,这并不适用——多分派的全部意义——但这是一个玩具示例。我想知道在这些情况下最佳做法是什么?它不必完全与时区有关,这只是我正在使用的示例。也许一个相关的问题是“Julia 如何在后台进行多次调度?” if... else
即参数是通过/块之类的东西发送给相关方法的switch... case
,还是比这更聪明?