contravariance

    7热度

    1回答

    的内部实现我有两个问题: 问题1个背景: 我注意到在“AsEnumerable()”中的LINQ微软方法的实现,这是寻找时: public static IEnumerable<TSource> AsEnumerable<TSource>(this IEnumerable<TSource> source) { return source; } 问题1: 我期待某种铸造或东西在这里

    1热度

    2回答

    我正在玩这个代码,我不明白的东西。 type t1 = [ `A ];; type t2 = [ t1 | `B ] ;; type t3 = [ t2 | `C ] ;; module type MT = sig type ('a,'b) fct val create : ('a -> 'b) -> ('a,'b) fct end;; module Mt :

    0热度

    1回答

    随着Scala中的泛型广大的支持,什么是实现以下的循环参数范围,其中C在Command[A, C]本身就是一亚型的最佳方式(即UserCommand或SystemCommand)? 注意:我忽略了C的较低/较高类型边界 - 正如问题所暗示的,我不确定如何以编译的方式表示此内容,或者如果我在Scala中缺少专门用于解决问题的功能这类循环问题。 trait CommandPrerequisite[-A

    4热度

    4回答

    我为我的存储库创建了此接口。 public interface IRepository<T, in TKey> where T: class { IEnumerable<T> Find(Expression<Func<T, bool>> predicate); IEnumerable<T> FindAll(); T FindSingle(TKey id);

    -3热度

    1回答

    我今天的协方差和逆变阅读起来,我碰到一个职位后来在哪里乔恩斯基特在类级别解释不变性堆栈交换。他用水果的例子,为什么允许协方差在这一水平将是一件坏事: //Bad List<Banana> bunchOfBananas = new List<Banana>(); // This would be valid if List<T> were covariant in T List<Fruit>

    5热度

    1回答

    我已经了解到,Scala并未检查其方差位置的对象专用(private[this])或对象保护(protected[this])定义。为什么不检查它们是安全的? 我已经阅读了一些与之相关的资料,但未能找到完整的答案。首先,Odersky的,等人的“编程在斯卡拉”说: http://www.artima.com/pins1ed/type-parameterization.html#19.7 原来,访问

    1热度

    1回答

    我在读了方差在.NET:http://msdn.microsoft.com/en-us/library/dd799517.aspx 我遇到这条线:Variance applies only to reference types; if you specify a value type for a variant type parameter, that type parameter is inva

    2热度

    1回答

    我有一个关于创建由函数T => Boolean表示的逆变集的问题,如果集合中有某个元素,则返回true,否则返回false。它看起来像这样:与工会功能 class BoolSet[-T](f: T=>Boolean) { def contains(x:T): Boolean = f(x) def add(x:T): BoolSet[T] = return new BoolS

    1热度

    1回答

    我有一种算法可以对某些对象的索引序列进行操作:它获取两个这样的序列并输出一个结果序列。我想它能够与至少工作: 字符串中的字符 线(串)在文本 为了简单起见阵列,让我们假设这个算法只是构造一个新的对象序列,从每个原始序列中逐个获取对象。当我不得不返回所需类型的对象或原始对象的空序列时,有一些特殊情况。只有两个操作我将在原来的序列使用的都是: : 通过指数 越来越序列的大小 我当前的代码看起来像这样得

    3热度

    1回答

    我有一个对变体接口的问题,我不知道解决它的最好方法。这些都是我的课: public interface IObject { } public interface IBigObject : IObject { } public interface ISmallObject : IObject { } public class AnObject : IBigObject { } pu