我真的有兴趣找出差异在哪里,更一般地说,是要确定不能使用HList的规范用例(或者说,不会比常规列表产生任何好处)。 (我知道在Scala中有22个(我相信) TupleN ,而一个只需要一个HList,但这不是我感兴趣的那种概念差异。) 我在下面的文字中标出了几个问题。 实际上可能没有必要回答这些问题,他们更多的是指出我不清楚的事情,并指导讨论在某些方面。 动机 我最近在SO上看到了一些关于人们build议使用HList(例如, Shapeless提供的)的答案,包括删除了这个问题的答案。 这引起了这个讨论 ,这又引发了这个问题。 介绍 在我看来,只有当你知道元素的数量和它们的精确types时,列表才是有用的。 这个数字实际上并不重要,但是您似乎不太可能需要生成一个列表,其中包含不同但静态精确的已知types的元素,但是您不会静态地知道它们的数量。 问题1:你甚至可以写这样一个例子,例如,在一个循环? 我的直觉是,具有静态未知数的任意元素(相对于给定的类层次结构是任意的)的静态精确的hlist只是不兼容。 HLists与元组 如果这是真的,也就是说,你静静地知道数字和types – 问题2:为什么不使用一个n-元组? 当然,你可以types化地映射和折叠一个HList(你也可以,但不能types化,在productIterator的帮助下通过一个元组来完成),但是因为元素的数量和types是静态的,所以你可能只需要访问元组元素直接执行操作。 另一方面,如果你在hlist上映射的函数是通用的,它接受所有的元素 – 问题3:为什么不通过productIterator.map使用它? 好的,一个有趣的差异可能来自方法重载:如果我们有几个重载的f ,具有由hlist提供的更强types信息(与productIterator相比)可以允许编译器select更具体的f 。 但是,我不确定这是否会在Scala中起作用,因为方法和函数是不一样的。 HLists和用户input 基于相同的假设,即你需要静态地知道元素的数量和types – 问题4:在元素依赖于任何types的用户交互的情况下,能否使用它? 例如,想象用循环内的元素填充一个hlist; 元素是从某处(UI,configuration文件,演员互动,networking)读取,直到某个条件成立。 什么样的Hlist是什么? 类似于接口规范getElements:HList,它应该与静态未知长度的列表一起工作,并且允许系统中的组件A从组件B获得这样的任意元素的列表。
众所周知,列表理解就像 [i for i in [1, 2, 3, 4]] 有字典理解,就像 {i:j for i, j in {1: 'a', 2: 'b'}.items()} 但 (i for i in (1, 2, 3)) 将最终在一个生成器,而不是一个tuple理解。 这是为什么? 我的猜测是一个tuple是不可变的,但这似乎不是答案。
我喜欢元组 它们允许您快速将相关信息分组在一起,而无需为其编写结构或类。 这在重构非常本地化的代码时非常有用。 初始化它们的列表似乎有点多余。 var tupleList = new List<Tuple<int, string>> { Tuple.Create( 1, "cow" ), Tuple.Create( 5, "chickens" ), Tuple.Create( 1, "airplane" ) }; 没有更好的方法吗? 我会喜欢字典初始值设定项的解决scheme。 Dictionary<int, string> students = new Dictionary<int, string>() { { 111, "bleh" }, { 112, "bloeh" }, { 113, "blah" } }; 我们不能使用类似的语法吗?
说我有一个Python函数返回一个元组中的多个值: def func(): return 1, 2 有没有一种很好的方式来忽略其中一个结果,而不是仅仅分配一个临时variables? 说如果我只对第一个价值感兴趣,是否有比这更好的方法: x, temp = func()
我正在学习Python并创build一个数据库连接。 在尝试添加到数据库时,我正在考虑从信息中创build元组,然后将它们添加到数据库中。 我在做什么 :我正在从用户那里获取信息并将其存储在variables中。 我可以将这些variables添加到一个元组中吗? 你能帮我一下语法吗? 另外,如果有这样做的有效方式,请分享… 编辑让我编辑一下这个问题…我只需要元组input数据库的信息。 一旦信息被添加到数据库,我应该删除元组? 我的意思是我不需要这个元组了。
随着.net 4中Tuple类的增加,我一直在试图决定在我的devise中使用它们是不是一个不好的select。 我看到它的方式, Tuple可以成为编写结果类的捷径(我相信也有其他用途)。 所以这: public class ResultType { public string StringValue { get; set; } public int IntValue { get; set; } } public ResultType GetAClassedValue() { //..Do Some Stuff ResultType result = new ResultType { StringValue = "A String", IntValue = 2 }; return result; } 相当于这个: public Tuple<string, int> GetATupledValue() { //…Do […]
有没有办法将Python元组扩展到一个函数 – 作为实际参数? 例如,这里的expand()是不可思议的: tuple = (1, "foo", "bar") def myfun(number, str1, str2): return (number * 2, str1 + str2, str2 + str1) myfun(expand(tuple)) # (2, "foobar", "barfoo") 我知道一个人可以将myfun定义为myfun((a, b, c)) ,但是当然可能有遗留代码。 谢谢
在Python中,什么时候应该使用列表和元组? 有时你没有select,例如,如果你有 "hello %s you are %s years old" % x 那么x必须是一个元组。 但是如果我是deviseAPI并select数据types的人,那么准则是什么?
我试图将列表转换为元组。 当我谷歌,我发现很多类似的答案: l = [4,5,6] tuple(l) 但是,如果我这样做,我得到这个错误消息: TypeError:“元组”对象不可调用 我该如何解决这个问题?
.Net 3.5不支持元组。 太糟糕了,但不确定未来版本的.net是否会支持元组?