【问题标题】:julia type dependend function behaviourjulia 类型依赖函数行为
【发布时间】:2016-04-28 20:18:33
【问题描述】:

我刚刚尝试为仅依赖于单个输入的函数定义多个方法。单个输入是不同类型的,行为应该根据输入类型而改变。

问题在于它不起作用,因为只存储了函数定义的最后一个“版本”。

代码如下:

abstract foo

type bar <: foo end
type car <: foo end
type dar <: foo end

f(bar) = "bar"
f(car) = "car"
f(dar) = "dar"

methods(f)
> # 1 method for generic function "f":
> f(dar)

我是否遗漏了某些东西,或者无法为依赖于单个输入的函数实现不同的方法?

【问题讨论】:

  • f(x::bar) = "bar"; f(x::car) = "car"; f(x::dar) = "dar"; 可能只是一个错字? ;)
  • 您好,谢谢您的回复。在这种情况下,没有。不是错字。目的是采用诸如 f(::car) 之类的参数,而不是具体对象。
  • 我还是不明白。 f(::bar) = "bar"f(::Type{bar}) = "bar" 你想要什么?
  • f(::Type{bar}) = "bar" 是吧。
  • 知道了。这正是我正在寻找的行为。您可以将其发布为答案吗?

标签: function methods types julia


【解决方案1】:

f(bar) = "bar" 等价于f(bar::Any) = "bar", 这里函数声明语法中的bar 是一个参数,而不是您之前定义的类型。它们在不同的范围内。

f(car) = "car"
f(dar) = "dar"

这里发生的事情是f(x::Any) 被覆盖了两次。

正确的方法是定义一个函数,它的参数应该是一个类型,所以那个参数的类型应该是DataType,在你的具体情况下正好是Type{bar}

f(::Type{bar}) = "bar"
f(::Type{car}) = "car"
f(::Type{dar}) = "dar"

【讨论】:

    猜你喜欢
    • 2019-03-12
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2020-04-01
    • 1970-01-01
    • 2022-01-10
    相关资源
    最近更新 更多