Julia 自定义类型分配

2024-04-05

我尝试从 Julia 中的自定义类型分配多个元素。但是我不知道该怎么做。或者换句话说,我想重载赋值运算符以返回该类型中包含的所有元素的元组。

这是所需的行为:

type foo
    a
    b
end

(a,b) = foo(1,2)
a
> 1

这是错误消息:

ERROR: LoadError: MethodError: `start` has no method matching start(::foo)

我的看法是,我需要实现某种负责分配的迭代器,但我不知道该怎么做。

EDIT

我实现了“start()、done()、next()”函数。现在我担心如何仍然允许我分配类型而不是它的元素。

Writing:

a, b = foo(1,2)
a

# returns
> 1

however:

a = foo(1,2)
a
# returns
> foo(1,2)

这太棒了。因此,朱莉娅认识到,有一个单一的元素 等式的左侧 (lhs) 将返回右侧的类型,并且 lhs 上有“n”个元素将从中分配“n”个元素 类型。因此,如果您想分配整个类型,则必须将该类型分配给 lhs 上的单个元素。就是这样。


该分配使用迭代器协议,因此start, done and next需要针对类型来实现。

关于样式、类型名称的注释应以大写字母开头,并且字段最好是具体类型以提高性能。下面我介绍了一个类型参数T in Foo。 T 可以是任何类型,但 Foo 的字段具有相同的类型。如果这是限制性的附加类型参数,可以引入或者可以为每个字段分配一个具体类型。

下面的例子实现了start, done and next对于类型Foo

type Foo{T}
    x::T
    y::T 
    z::T
end
Base.start(foo::Foo) = 1
Base.done(foo::Foo, i) = nfields(foo) < i
Base.next(foo::Foo, i) = getfield(foo, i), i+1

通过上面的实现,Foo 的内容可以被分配到不同的变量:

x, y, z = Foo(1, 2, 3)

作为奖励,现在可以在 forloop 中迭代 Foo,如下所示:

for i in Foo(1, 2, 3)
    println(i)
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Julia 自定义类型分配 的相关文章

  • 运营商部分应用

    如果我想在字符末尾添加一个空格以返回列表 如果我不传递任何参数 我将如何通过部分应用程序来完成此操作 还有类型是 space Char gt Char 由于使用 和 运算符出现 解析错误 我在末尾添加空格时遇到问题 到目前为止我所拥有的是
  • Visual Studio const_iterator 赋值错误

    默认构造的赋值vector
  • 如何获取 LinkedHashMap 的 keyIterator?

    通过查看Sun的LinkedHashMap的源代码 我发现有一个名为Key Iterator的私有类 我想使用它 我怎样才能获得访问权限 您可以通过致电获取 myMap keySet iterator 你甚至不需要知道它的存在 它只是实现的
  • 要统一的类型变量出现在类型中

    我有一个函数可以从两个列表重建一棵树 我返回所有分支的列表 但收到一个我不明白的错误 但我认为这与返回类型有关 错误是这样的 Can t unify a with a list Type variable to be unified occ
  • 使用 Julia 的 Debugger.jl - 如何进入类似于 Python 的 pdb.set_trace() 或 ipdb.set_trace() 的调试模式?

    Julia 的新 Debugger jl 很棒 但有时要达到我想要达到的代码中的确切位置有点痛苦 有没有办法可以进入交互式调试模式 类似于 Python 在 pdb set trace 或 ipdb set trace 中的模式 例如 我希
  • Oracle BLOB 与 VARCHAR

    我需要在表的一列中存储一个 大 SQL 查询 我想使用BLOB场地 需要明确的是 我想存储查询 而不是其结果 最好使用什么 BLOB or a VARCHAR 或者也许还有别的什么 另一种选择是 CLOB 对于文本数据 使用 CLOB 比使
  • 如何一次又一次地使用同一个迭代器?

    给出下一个代码 这是某个大型方法的一部分 ArrayList
  • 估算缺失数据,同时强制相关系数保持不变

    考虑以下 excel 数据集 m r 2 0 3 3 0 8 4 0 1 3 2 1 5 2 2 3 1 9 2 5 1 2 3 0 2 0 2 6 我的目标是使用以下条件填充缺失值 将上述两列之间的成对相关性表示为 R 大约 0 68 将
  • Visual Studio 2010 基类扩展编译器错误

    我有一个 C 类 提供一些简单的类和一些基类扩展 例如这个 public static Boolean ToBooleanOrDefault this String s Boolean Default return ToBooleanOrD
  • 类 GADT 类型变量的未来角色?

    A 昨天的问题 https stackoverflow com q 41135212 3072788有一个定义HList 来自HList https hackage haskell org package HList 0 4 1 0 doc
  • 从向量中删除向量::end

    当我使用时它工作正常吗 什么也不做 vector
  • java.util.ConcurrentModificationException 和迭代?

    我对数组列表和迭代器非常陌生 这是我第一次遇到这个异常 我有一个 ArrayList u 我想做以下算法 for Character c u if k 1 base case if isAnswer s u get 0 System out
  • Haskell 类型系统的细微差别

    我一直在深入了解 haskell 类型系统的本质 并试图了解类型类的要点 我已经学到了很多东西 但我在下面的代码片段上遇到了困难 使用这些类和实例定义 class Show a gt C a where f Int gt a instanc
  • 什么是欣德利米尔纳?

    我遇到过这个词欣德利 米尔纳 我不确定是否理解它的意思 我已阅读以下帖子 史蒂夫 叶格 动态语言的反击 http steve yegge blogspot com 2008 05 dynamic languages strike back
  • TypeScript:实现具有调用签名和索引签名的接口

    我想创建一个满足此类型的对象 interface I string x string number 并通过 TypeScript 类型检查 理想情况下 我希望不需要诉诸技巧 例如使用any作为中间步骤 我知道可以将其他字段添加到具有调用签名
  • Haskell:是的,没有类型类。为什么是整数?

    我有一个关于 GHCi 如何假定整数类型的问题 我正在阅读 Learn you a Haskell 是 否类型的课程 如果您想阅读全文 这里有一个链接 http learnyouahaskell com making our own typ
  • 并行模拟写入同一文件

    我的目标是在集群上并行运行 10 000 个左右的 Julia 编码模拟 每个模拟独立于所有其他模拟 每个模拟都有一个要输出的数字 以及有关哪个模拟产生该数字的 3 列信息 因此 强制每个模拟打印在单独的文件上对我来说听起来有点愚蠢 我可以
  • 具有上限的联合类型

    我正在遵循这个问题的公认答案中提出的技术如何定义 类型析取 联合类型 https stackoverflow com questions 3508077 does scala have type disjunction union type
  • Yield Return == IEnumerable 和 IEnumerator 吗?

    Is yield return实施的捷径IEnumerable and IEnumerator 是的 您可以在我的书 C in Depth 的第 6 章中找到更多相关信息 幸好第六章是免费提供 http www manning source
  • 具有继承类型的 Aux 模式推理失败

    我有一个复杂的玩具算法 我希望纯粹在类型级别上表示 根据饮食要求选择当天菜肴的修改 对卷积表示歉意 但我认为我们需要每一层才能达到我想要使用的最终界面 我的代码有一个问题 如果我们表达一个类型约束Aux 模式生成的类型基于另一个泛型类型 它

随机推荐