小编Jes*_*per的帖子

Traversable的继承和类型参数

我正在研究Scala 2.8集合类的源代码.我对层次结构有疑问scala.collection.Traversable.请查看以下声明:

package scala.collection
    trait Traversable[+A]
        extends TraversableLike[A, Traversable[A]] 
        with GenericTraversableTemplate[A, Traversable]

    trait TraversableLike[+A, +Repr]
        extends HasNewBuilder[A, Repr]
        with TraversableOnce[A]

package scala.collection.generic
    trait HasNewBuilder[+A, +Repr]

    trait GenericTraversableTemplate[+A, +CC[X] <: Traversable[X]]
        extends HasNewBuilder[A, CC[A] @uncheckedVariance]
Run Code Online (Sandbox Code Playgroud)

问题:为什么要使用类型参数进行Traversable扩展- 为什么不呢?我试着尝试一个具有相同结构的小程序,并在我尝试将其更改为时收到一条奇怪的错误消息:GenericTraversableTemplate[A, Traversable][A, Traversable[A]]Traversable[A]

error: Traversable[A] takes no type parameters, expected: one
Run Code Online (Sandbox Code Playgroud)

我猜这个@uncheckedVariance注释的使用GenericTraversableTemplate也与此有关吗?(这似乎是一种可能不安全的黑客,迫使事情发挥作用......).

编辑 - 在这个问题中找到关于注释的一些有用的答案(因为GenericTraversableTemplate它用于具有不同方差的可变和不可变集合).

问题:当您查看层次结构时,您会看到Traversable继承HasNewBuilder两次(一次通过TraversableLike和一次通过GenericTraversableTemplate),但类型参数略有不同.这是如何工作的?为什么不同的类型参数不会导致错误?

generics scala scala-2.8 scala-collections

8
推荐指数
1
解决办法
747
查看次数

Scala - 如何定义引用自身的结构类型?

我正在尝试编写一个泛型interpolate方法,该方法适用于任何具有两种方法的类型,a *和a +,如下所示:

trait Container {
  type V = {
    def *(t: Double): V
    def +(v: V): V
  }

  def interpolate(t: Double, a: V, b: V): V = a * (1.0 - t) + b * t
}
Run Code Online (Sandbox Code Playgroud)

这不起作用(在Scala 2.8.0.RC7上),我收到以下错误消息:

<console>:8: error: recursive method + needs result type
           def +(v: V): V
                        ^
<console>:7: error: recursive method * needs result type
           def *(t: Double): V
                             ^
Run Code Online (Sandbox Code Playgroud)

如何正确指定结构类型?(或者有更好的方法吗?)

scala structural-typing

8
推荐指数
1
解决办法
871
查看次数

当使用lambda表达式而不是匿名内部类时,Spring无法确定泛型类型

我正在玩Spring ConversionService,添加一个简单的转换器将ZonedDateTime(Java 8)转换为String:

@Bean
public ConversionServiceFactoryBean conversionServiceFactoryBean() {
    ConversionServiceFactoryBean conversionServiceFactoryBean =
        new ConversionServiceFactoryBean();

    Converter<ZonedDateTime, String> dateTimeConverter =
        new Converter<ZonedDateTime, String>() {
            @Override
            public String convert(ZonedDateTime source) {
                return source.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
            }
        };

    conversionServiceFactoryBean.setConverters(
        new HashSet<>(Arrays.asList(dateTimeConverter)));
    return conversionServiceFactoryBean;
}
Run Code Online (Sandbox Code Playgroud)

这很好用.但我的IDE(IntelliJ)建议用lambda表达式替换匿名内部类:

Converter<ZonedDateTime, String> dateTimeConverter =
    source -> source.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
Run Code Online (Sandbox Code Playgroud)

如果我这样做,那么它不再起作用,我得到一个关于Spring无法确定泛型类型的错误:

Caused by: java.lang.IllegalArgumentException: Unable to the determine sourceType <S> and targetType <T> which your Converter<S, T> converts between; declare these generic types.
    at org.springframework.util.Assert.notNull(Assert.java:112)
    at org.springframework.core.convert.support.GenericConversionService.addConverter(GenericConversionService.java:100)
    at org.springframework.core.convert.support.ConversionServiceFactory.registerConverters(ConversionServiceFactory.java:50)
    at …
Run Code Online (Sandbox Code Playgroud)

java spring java-8

8
推荐指数
1
解决办法
2119
查看次数

通过引用访问默认参数是否安全?

我有一个看起来像这样的函数:

class SomeClass {
    // ...
};

void some_function(const SomeClass& arg = SomeClass());
Run Code Online (Sandbox Code Playgroud)

该函数some_function通过引用访问其参数并具有默认值.这样做是否安全,或者在没有参数的情况下调用函数时引用是否无效?

c++

7
推荐指数
1
解决办法
205
查看次数

SSE指令中的UnsignedSaturate是什么意思?

我正在将SIMD代码转换为等效的c代码.我被困在SSE指令之一

__m128i _mm_packus_epi16 (__m128i a, __m128i b)
Run Code Online (Sandbox Code Playgroud)

它返回

r0 := UnsignedSaturate(a0)
r1 := UnsignedSaturate(a1)

...
r7 := UnsignedSaturate(a7)
r8 := UnsignedSaturate(b0)
r9 := UnsignedSaturate(b1)
...
r15 := UnsignedSaturate(b7)
Run Code Online (Sandbox Code Playgroud)

什么UnsignedSaturate意思?

c c++ sse

7
推荐指数
1
解决办法
2826
查看次数

是否有使用最终类、枚举或记录类型作为类型参数绑定的用例?

您可以使用 Java 中的绑定来限制类型参数。例如:

interface Foo<T extends Bar> {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

您可以使用多种类型进行绑定,包括接口、类、参数化类型和类型参数。换句话说:Bar可以是接口、类等(不能是基元或数组类型)。

您还可以使用finalenumrecord类型作为边界。所以当Bar是一个finalenum或时,上面的方法仍然有效record

但是enumandrecord类型是隐式的final- 不可能创建enumor的子类型record。这意味着当您使用enumorrecord作为类型参数绑定时,填充类型参数的唯一可能性是使用该特定enumrecord类型本身作为类型参数。课程也是如此final

Foo<T>如果 ifT不能是它自身以外的任何东西,那是没有意义的Bar。在这种情况下,您也可以完全省略类型参数Foo并直接使用Bar

在某些情况下,您可以使用finalenumrecord类型作为类型参数绑定吗?

java generics

7
推荐指数
1
解决办法
172
查看次数

Java中冗余导入语句的影响是什么?

什么是冗余的Java import语句?

它们是否影响编译的运行时(性能/大小)?还是像intellisense这样的东西?

提出不同的问题:删除它们有多重要?

java performance

6
推荐指数
1
解决办法
3460
查看次数

如何将数字拆分为scala中的数字

以下代码段可以很好地将数字拆分成数字,但它太长了:

val digits = (num toString).toList map(_.toString) map(_.toInt)
Run Code Online (Sandbox Code Playgroud)

我使用它们toString来获取应用时的实际值,toInt而不是Int表示Char返回的值toList.

我是Scala的新手,我不习惯scala的表达风格.有没有更短的方式来做到这一点.

split scala numbers

6
推荐指数
2
解决办法
4020
查看次数

用Java检查字节数组中的各个位?

所以说我有一个字节数组,并且我有一个函数来检查字节数组的第n个最低有效位索引是1还是0.如果该位是1则返回true,如果该位则返回false字节数组的最低有效位定义为字节数组第0个索引中的最后一个有效位,字节数组的最高有效位定义为(字节数组中的最高有效位). length - 1)字节数组的索引.

例如,

byte[] myArray = new byte[2];
byte[0] = 0b01111111;
byte[1] = 0b00001010;
Run Code Online (Sandbox Code Playgroud)

呼叫:

myFunction(0) = true;
myFunction(1) = true;
myFunction(7) = false;
myFunction(8) = false;
myFunction(9) = true;
myFunction(10) = false;
myFunction(11) = true;
Run Code Online (Sandbox Code Playgroud)

做这个的最好方式是什么?

谢谢!

java bit-manipulation

6
推荐指数
1
解决办法
1万
查看次数

字符串插值的奇怪错误

我用以下代码得到一个奇怪的错误.

我有一个Example带有伴侣对象的类,我在其中定义了一个字符串SIGN.在类Example我有一个方法,我创建一个正则表达式,我使用字符串插值,以便我可以SIGN用来构建我的正则表达式.

这编译,但我在运行时遇到一个奇怪的错误.这是Scala的错误吗?我正在使用Scala 2.10.3(在Windows 7上).

scala> :paste
// Entering paste mode (ctrl-D to finish)

class Example {
  import Example._
  def regex = s"""$SIGN?\d+""".r
}

object Example {
  private val SIGN = """(\+|-)"""
}


// Exiting paste mode, now interpreting.

defined class Example
defined module Example

scala> val e = new Example
e: Example = Example@77c957d9

scala> e.regex
scala.StringContext$InvalidEscapeException: invalid escape character at index 1 in "?\d+"
        at scala.StringContext$.treatEscapes(StringContext.scala:229)
        at scala.StringContext$$anonfun$s$1.apply(StringContext.scala:90)
        at scala.StringContext$$anonfun$s$1.apply(StringContext.scala:90) …
Run Code Online (Sandbox Code Playgroud)

regex scala string-interpolation

6
推荐指数
1
解决办法
585
查看次数