小编ecd*_*dhe的帖子

了解Y-Combinator的实现

我想在薄荷细节中理解我们如何设法从Y-combinator的lambda演算中获得:

Y = ?f.(?x.f (x x)) (?x.f (x x))
Run Code Online (Sandbox Code Playgroud)

到以下实现(在Scala中):

def Y[A, B](f: (A => B) => A => B): A => B = (x: A) => f(Y(f))(x)
Run Code Online (Sandbox Code Playgroud)

我对函数式编程很陌生,但我对lambda演算以及替换过程的工作方式有了不错的理解.然而,我很难理解我们是如何从正式表达式实现的.

此外,我想知道如何告诉我的函数的参数类型数量以及它的返回类型是什么lambda

recursion functional-programming scala lambda-calculus y-combinator

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

JVM中的对象表示

在Java®虚拟机规范的第2.7节"对象表示"中,它说:

在Oracle的一些Java虚拟机实现中,对类实例的引用是指向句柄的指针,该句柄本身是一对指针:一个指向包含对象方法的表和指向表示Class对象的指针对象的类型,另一个是从堆为对象数据分配的内存.

我的印象是句柄有三个指针而不是两个:

  • 一个指向包含对象方法的表的指针(在方法区域中).
  • 指向Class对象的指针,该对象表示对象的类型(在方法区域中).
  • 指向从堆分配的对象数据的内存的指针.

任何人都可以帮我解决这个困惑.

java jvm memory-management

3
推荐指数
1
解决办法
990
查看次数

Java 8 Streams:对于Stream <Byte>类型,未定义boxed()方法

我试图将一个字节数组转换为LinkedList<Byte>:

//data is of type byte[]
List<Byte> list = Arrays.stream(toObjects(data)).boxed().collect(Collectors.toList());

Byte[] toObjects(byte[] bytesPrim) {
    Byte[] bytes = new Byte[bytesPrim.length];
    Arrays.setAll(bytes, n -> bytesPrim[n]);

    return bytes;
}
Run Code Online (Sandbox Code Playgroud)

第一行引发一条错误消息:

boxed()类型的方法未定义Stream<Byte>.

知道为什么我会收到此错误消息以及如何规避这个问题吗?

java boxing java-8 java-stream

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