小编Lui*_*gro的帖子

如何克隆长度大于32的数组?

固定长度的本机类型数组(或实现Copy特征的类型)可以在Rust中克隆到32的长度.也就是说,这会编译:

fn main() {
    let source: [i32; 32] = [0; 32]; // length 32
    let _cloned = source.clone();
}
Run Code Online (Sandbox Code Playgroud)

但这不是:

fn main() {
    let source: [i32; 33] = [0; 33]; // length 33
    let _cloned = source.clone(); // <-- compile error
}
Run Code Online (Sandbox Code Playgroud)

实际上,traitClone只为每个通用数组长度声明一个方法,从0到32.

什么是克隆长度的通用数组的有效和惯用的方法,比如33?

arrays rust

10
推荐指数
2
解决办法
1573
查看次数

如何在Scala 2.11中查找封闭源文件的名称

在编译时,如何在scala 2.11中检索当前源文件的名称(代码编写的位置)?

scala scala-2.11

5
推荐指数
2
解决办法
428
查看次数

静态类型的异构列表构建器

我想要实现的是一种方法:

  1. 定义异构列表的类型列表
  2. 从上面的定义,构建一个静态类型的值列表

理想情况下,我想在IDE中键入以下表达式:

val record = types.addValue("test").addValue(123).addValue(new java.util.Date())
Run Code Online (Sandbox Code Playgroud)

具有addValue()由IDE类型推理引擎约束的参数类型.

以下是第1点工作实现:记录字段类型的规范:

case class FieldType[V, T <: FieldType[_, _]](clazz: Class[V], tail: T) {
  def addValue(value: V) = FieldValue(value, tail)
}
case class FieldValue[V, T <: FieldType[_, _]](value: V, tail: T)
object emptyFieldType extends FieldType(classOf[Null], null)
Run Code Online (Sandbox Code Playgroud)

这是一个由以下内容组成的记录的示例规范String, Int, Date:

val types = FieldType(
  classOf[String], FieldType(
    classOf[Int], FieldType(
      classOf[java.util.Date], emptyFieldType
    )
  )
)
Run Code Online (Sandbox Code Playgroud)

通过使用类型中的addValue方法FieldType,编译器可以识别任何深度的参数类型:

val a = types.addValue("") // here only …
Run Code Online (Sandbox Code Playgroud)

types scala type-inference heterogeneous type-parameter

2
推荐指数
1
解决办法
150
查看次数