【问题标题】:Accessing third element in triple tuple访问三元组中的第三个元素
【发布时间】:2017-02-14 09:36:53
【问题描述】:

我正在寻找访问 Haskell 元组中的第三个元素。元组是 (String, String, Int) 类型,我想要 Int。我尝试过以我在网上看到的方式创建自己的,主要是:

get3rd (_,_,x) = x

*我也尝试过使用类型声明:(String, String, Int) -> Int 并为元组创建自定义类型并使用它。

如果我输入的元组全部由整数组成,则此方法有效,但是一旦将字符串放入,我会收到此错误:数据构造函数不在范围内:Mary :: String *Mary 是任意字符串,输入的两个字符串都出错。任何帮助都会很好地解决这个问题!

【问题讨论】:

  • 这行得通,所以错误可能出现在您没有向我们展示的代码中。 Mary 是什么?
  • 您输入的是(Mary, Mary, 1) 而不是("Mary", "Mary", 1) 吗?
  • get3rd ("Mary", "Mary", 1) 在这里与get3rd :: (String, String, Int) -> Int 和推断类型 (get3rd :: (t, t1, t2) -> t2) 都可以正常工作(应该这样:))。因此,如果您仍然有问题,您可能需要向我们提供一个最小的工作示例(即带有 main :: IO ().hs 文件的完整内容,它不会为您编译)。
  • 只是想补充一点,如果您发现自己使用 >2 个元素元组,则可能值得创建一个新的数据类型。
  • 你能发布完整的代码吗?

标签: haskell tuples


【解决方案1】:

如果你不需要经常这样做,这个

let (_,_,x) = someTuple
in doSomething x

或者这个

doSomething x
where (_,_,x) = someTuple

和这个差不多

get3rd (_,_,x) = x
...
doSomething (get3rd someTuple)

但是如果你正在处理嵌套元组之类的东西,它可能会变得混乱

【讨论】:

  • 对,但我怀疑这个问题级别的人是否清楚你的意思。
猜你喜欢
  • 2011-06-18
  • 1970-01-01
  • 2016-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多