上层类型绑定和下层类型绑定混淆

时间:2015-08-25 14:08:57

标签: scala

var bulk = db.documents.initializeOrderedBulkOp(),
    count = 0;

db.documents.find().forEach(function(doc) {
  var last_modified = doc.services.sort(function(a,b) {
    return a.last_modified < b.last_modified;
  }).slice(-1)[0].last_modified;

  bulk.find({ "_id": doc._id }).updateOne({
    "$set": { "last_modified": last_modified }
  });
  count++;

  if ( count % 1000 == 0 ) {
    bulk.execute();
    bulk = db.documents.initializeOrderedBulkOp();
  }

});

if ( count % 1000 != 0 )
  bulk.execute();

我期待测试(新GrandChild)应该给出编译错误。它是如何工作的?我是否理解错误的类型?

2 个答案:

答案 0 :(得分:0)

由于GrandChild扩展Child,编译器在调用中选择了B类型参数为Child

test(new GrandChild)

如果明确指定类型,则会出现预期的错误:

test[GrandChild](new GrandChild)

答案 1 :(得分:0)

B&gt;:Child表示B应该是Child的超类型,所有这些类都是Parent(Child和GrandChild),因为所有类都是从Parent扩展。