首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用未装箱的Vectors?

如何使用未装箱的Vectors?
EN

Stack Overflow用户
提问于 2012-06-11 02:26:51
回答 2查看 416关注 0票数 1

我正在尝试使用这里提供的矢量类型实现一种光线数据类型:http://www.haskell.org/haskellwiki/Numeric_Haskell:_A_Vector_Tutorial#Importing_the_library

Vector只能容纳doubles,所以我想使用Vector类型的Unboxed版本。

下面是我正在尝试编译的代码:

代码语言:javascript
复制
module Main where

    import qualified Data.Vector.Unboxed as Vector

    data Ray = Ray Data.Vector.Unboxed Data.Vector.Unboxed

我得到的错误是

代码语言:javascript
复制
Not in scope: type constructor or class `Data.Vector.Unboxed'
Failed, modules loaded: none.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-11 02:34:57

模块Data.Vector.Unboxed导出一个类型构造函数Vector,该函数以您想要存储的类型作为参数。由于您也将此模块重命名为Vector,因此此类型的限定名称为Vector.Vector。假设你想要两个双精度的向量,因此你应该这样使用它:

代码语言:javascript
复制
data Ray = Ray (Vector.Vector Double) (Vector.Vector Double)
票数 6
EN

Stack Overflow用户

发布于 2012-06-11 02:38:02

通常,当你导入一些东西时,你会这样做:

代码语言:javascript
复制
import Data.Foo -- A module that contains "data Bar = Bar ..."

myfunction = Bar 3 2 4 -- Use Bar

如您所见,您可以直接访问Data.Foo模块中的所有内容,就像在同一个模块中编写代码一样。

相反,您可以使用限定导入某些内容,这意味着您必须在每次访问时指定指向您引用的内容的完整模块“路径”:

代码语言:javascript
复制
import qualified Data.Foo -- A module that contains "data Bar = Bar ..."

myfunction = Data.Foo.Bar 3 2 4 -- Use Bar

在这里,您必须指定要访问的数据类型的完整“路径”,因为该模块已作为限定导入。

还有另一种方法可以导入带有限定的内容;您可以为模块"path“指定别名,如下所示:

代码语言:javascript
复制
import qualified Data.Foo as Foo -- A module that contains "data Bar = Bar ..."

myfunction = Foo.Bar 3 2 4 -- Use Bar

我们已将Data.Foo部件重命名为简单的Foo。这样,我们就可以在引用数据构造函数时编写Foo.Bar

您导入了别名为Vector的模块Data.Vector.Unboxed。这意味着当您想要访问Vector数据类型时,必须使用Vector.Vector。我建议你像这样导入向量:

代码语言:javascript
复制
import Data.Vector.Unboxed (Vector)
import qualified Data.Vector.Unboxed as Vector

这样,您就可以直接导入Vector类型,这样就可以在没有任何模块限定符的情况下访问它,但是当您想要使用Vector函数时,您需要添加Vector前缀(例如Vector.null ...)。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10971232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档