scala – 打印集合:特定于变量
我有多维数组,其中维度保存在ArrayBuffer中.
当我打印它时,显然,我得到了ArrayBuffer(2,2,3),但我希望有2x2x3.我知道我可以按照以下方式执行println(multiarray.dim.mkString(“x”)). 通过简单发布println(multiarray.dim),我有没有“神奇”的方法获得2x2x3? 编辑 dim是给出维度的多维数组的方法…… 解决方法
如果dim返回一个ArrayBuffer,那么,不,你不能只使用println(multiarray.dim).以下是一些简单的替代方案:
>定义一个方法,将维度作为String返回(在多阵列类中): def dimStr = dim mkString "x" >定义用于打印的实用方法: def printdim(buffer: ArrayBuffer[Int]) = println(buffer mkString "x") // or def printdim(multiarray: MultiArray) = println(multiarray.dim mkString "x") 推广toString: 通过更多的努力,您可以定义一个可以按照您喜欢的方式工作的println版本.我们的想法是抽象String-creation逻辑.这种方法的强大之处在于,一旦基础架构到位,您就可以通过将适当的隐式带入范围来控制任何类型的“字符串化”. 首先定义一个类型类: trait Stringable[T] extends (T => String) 提供类型类的默认实现(它只是回到普通的toString方法): class DefaultStringable[T] extends Stringable[T] { def apply(x: T) = x.toString } object DefaultStringable { implicit def any2stringable[T]: Stringable[T] = new DefaultStringable[T] } 为您的用例实现类型类: implicit object DimIsStringable extends Stringable[ArrayBuffer[Int]] { def apply(buf: ArrayBuffer[Int]) = buf mkString "x" } 定义使用类型类的print方法: def myprintln[T](x: T)(implicit e: Stringable[T]) = e(x) 乐趣. import DefaultStringable._ myprintln(ArrayBuffer(1,3)) // prints "ArrayBuffer(1,3)" 利润! import DimIsStringable._ myprintln(ArrayBuffer(1,3)) // prints "1x2x3" 如果需要,您可以使默认类型类始终可用,而无需任何导入.为此,您将伴随模块中的转换提供给Stringable特征(如下所示).这样做的缺点是,如果您忘记导入适当的Stringable,您将不再有编译器错误提醒您. object Stringable { implicit def any2stringable[T]: Stringable[T] = new DefaultStringable[T] } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |