gpt4 book ai didi

generics - Scala:方法重载泛型类型

转载 作者:行者123 更新时间:2023-12-04 01:23:27 24 4
gpt4 key购买 nike

在 C# 中,我可以重载泛型类型的方法,如下例所示:

// http://ideone.com/QVooD
using System;
using System.Collections.Generic;

public class Test {
public static void Foo(List<int> ints) {
Console.WriteLine("I just print");
}

public static void Foo(List<double> doubles) {
Console.WriteLine("I iterate over list and print it.");
foreach(var x in doubles)
Console.WriteLine(x);
}

public static void Main(string[] args) {
Foo(new List<int> {1, 2});
Foo(new List<double> {3.4, 1.2});
}
}

但是,如果我尝试在 Scala 中执行相同操作,则会引发编译时错误 List[Int]List[Double]由于删除而删除为相同类型。我听说 Scala 的 Manifest s 可用于解决此问题,但我不知道如何解决。我也没有在文档中找到任何有用的东西。

所以我的问题是:我如何使用 Manifest s(或任何其他有效的方法)重载由于删除而删除为相同类型的泛型类型的方法?

最佳答案

Manifest 也没有真正的帮助,因为它们在删除后将具有相同的类型。

什么将有助于拥有不同数量的参数(或删除后的不同类型)。我发现使用不同数量的隐式参数可以透明地解决这个问题,并且通过使用 scala.Predef.DummyImplicit ,您甚至不必在任何地方导入隐式。

class Test{
def foo(ints : List[Int])
def foo(doubles : List[Double])(implicit i1:DummyImplicit)
def foo(strings : List[String])(implicit i1:DummyImplicit, i2:DummyImplicit)
}

关于generics - Scala:方法重载泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4982552/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com