【问题标题】:What does 'qualified' mean in 'import qualified Data.List' statement?“导入合格的 Data.List”语句中的“合格”是什么意思?
【发布时间】:2012-06-30 14:28:58
【问题描述】:

我了解import Data.List

但是qualified 在声明import qualified Data.List 中是什么意思?

【问题讨论】:

    标签: haskell


    【解决方案1】:

    合格的导入使导入的实体仅以合格的形式可用,例如

    import qualified Data.List
    
    result :: [Int]
    result = Data.List.sort [3,1,2,4]
    

    只有import Data.List,实体以合格形式和不合格形式可用。通常,只做一个合格的导入会导致名字太长,所以你

    import qualified Data.List as L
    
    result :: [Int]
    result = L.sort [3,1,2,4]
    

    合格的导入允许使用从多个模块导入的同名函数,例如map 来自Preludemap 来自Data.Map

    【讨论】:

      【解决方案2】:

      如果您执行非限定导入(默认),您可以仅通过名称引用任何导入的内容。

      如果你做一个合格的导入,你必须在名称前加上它导入的模块。

      例如,

      import Data.List (sort)
      

      这是不合格的导入。你现在可以说sortData.List.sort

      import qualified Data.List (sort)
      

      这是一个合格的导入。现在sort 本身不起作用,你必须说Data.List.sort

      因为这很长,通常你会说类似

      import qualified Data.List (sort) as LS
      

      现在你可以写LS.sort,它更短。

      【讨论】:

        【解决方案3】:

        关键字qualified 表示导入模块中的符号不​​会导入到非限定(无前缀)命名空间中。它们仅以其完整的限定名称可用。例如,foldr' 具有非限定名称 foldr' 和限定名称 Data.List.foldr'

        使用合格的导入来防止命名空间污染。也可以使用import qualified Foo as Bar,它从Foo 导入,但名称好像导入源于Bar。例如,如果您键入import qualified Data.List as L,则可以将foldr' 用作L.foldr'

        【讨论】:

          猜你喜欢
          • 2021-07-22
          • 2015-02-16
          • 1970-01-01
          • 1970-01-01
          • 2014-02-08
          • 2011-09-22
          • 2011-08-15
          • 2011-11-18
          相关资源
          最近更新 更多