小编use*_*ser的帖子

Scala 3 中的@main 注释如何工作?

在学习 Scala 3 时,我看到了一种新的编写方式main

@main def main1 =
  println("main1 printed something")
Run Code Online (Sandbox Code Playgroud)

我检查了来源@main,它只是

class main extends scala.annotation.Annotation {}
Run Code Online (Sandbox Code Playgroud)

使用@main这里发生了什么?

program-entry-point scala scala-3

4
推荐指数
1
解决办法
86
查看次数

Hotspot JVM 如何处理 x86 上的整数除法溢出?

intJava中将两个s相除并没有什么特别之处。除非处理两种特殊情况之一:

  1. 被零除。(JVMS 需要虚拟机抛出ArithmeticException
  2. 除法溢出(Integer.MIN_VALUE / -1,JVMS 要求结果等于Integer.MIN_VALUE)(这个问题只针对这种情况)

来自第 6 章 Java 虚拟机指令集。idiv

有一种特殊情况不满足此规则:如果被除数是该int类型的最大可能数量级的负整数,并且除数为-1,则发生溢出,结果等于被除数。尽管溢出,但在这种情况下不会引发异常。

在我的计算机上 ( x86_64) 本机分区产生SIGFPE错误。

当我编译以下 C 代码时:

#include <limits.h>
#include <stdio.h>

int divide(int a, int b) {
  int r = a / b;
  printf("%d / %d = %d\n", a, b, a / b);
  return r;
}

int main() {
  divide(INT_MIN, -1);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到结果(在 x86 上):

tmp …
Run Code Online (Sandbox Code Playgroud)

java jvm jvm-hotspot

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

TypeTest 克服 scala3 中泛型类型的擦除问题

TypeTest我在理解scala3 中的 s 如何替代scala 2 中的 s 时遇到问题。TypeTag用例能够匹配像 x: List[Int] 这样的通用参数。

我试图解决的具体例子:

enum Foo :
  case Bar()
  case Baz()

case class Mod[T <: Foo](modFn: T => T)

def modifyBarsOrBaz(mod: Mod[_]) = mod match
  case barMod: Mod[Foo.Bar] => ???
  case bazMod: Mod[Foo.Baz] => ???
Run Code Online (Sandbox Code Playgroud)

编译器警告中的编译结果(如预期)

the type test for Mod[Foo.Bar] cannot be checked at runtime以及一个无法触及的案例。

现在我的问题是:这在 scala3 中可以做到吗?

我的印象是,我必须以某种方式TypeTest[Any, Mod[Foo.X]]为所有作为枚举子类的 X 提供一个Foo

但我什至很难实现这些测试,以及了解什么using参数modifyBarsOrBaz其工作所需的

因此我想出了以下(不起作用)解决方案:

def modifyBarsOrBaz[T <: Foo](mod: Mod[T])(using …
Run Code Online (Sandbox Code Playgroud)

reflection scala scala-3

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

Dotty/Scala 3 中的结构类型编译失败?

我测试了以下结构类型的代码:

trait Data

object Main
{
  def main(args: Array[String]): Unit =
  {
    val data = new Data {
      val value: Int = 1
    }

    println(data.value)
  }
}
Run Code Online (Sandbox Code Playgroud)

它在 Scala 2.13.2 中编译成功,但在 Dotty/Scala3 中失败。如何在 Dotty/Scala3 中使用结构类型?谢谢!

scala dotty structural-typing scala-3

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

单个函数构造多个具有相同结构的案例类

问题:我有一些案例类,对于每个案例类,我必须运行一个返回相同案例类实例的简单函数。所以对于每个案例类,我每次都必须实现相同的功能,即使功能具有相同的功能。是否有迭代案例类类型的 SCALA 方式。

object SampleCaseClasses {

  case class a(elem1: String, elem2: Int)

  case class b(elem3: String, elem4: Int)

  case class c(elem5: String, elem6: Int)

  case class d(elem7: String, elem8: Int)

  case class e(elem9: String, elem10: Int)

  case class f(elem10: String, elem12: Int)

  case class g(elem11: String, elem14: Int)

}

import SampleCaseClasses.{a, b}

def getProperAddress[a](host:String,port:Int): SampleCaseClasses.a ={
  a(host.toUpperCase,port+1)
}

def getProperAddress[b](host:String,port:Int): SampleCaseClasses.b ={
  b(host.toUpperCase,port+1)
}
Run Code Online (Sandbox Code Playgroud)

scala

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

如何使用 Java 9+ 从 JDK 模块中获取类的文件?

我正在尝试从java.baseas 中读取类InputStream。我已经有一种方法可以读取给定File对象的类文件,但是我无法获取File对象,因为我使用的是 JDK 11 并且不再有rt.jar文件了。按照这个答案之后,我大致有以下代码(我使用的是 Scala,但这本质上是一个关于 Java 的问题,因此是标签):

val fs = FileSystems.newFileSystem(URI.create("jrt:/"), Collections.emptyMap, loader)

Files.list(fs.getPath("/modules")).forEach { mdl =>
  Files.walk(mdl).forEach { (classFile: Path) =>
    val asFile = classFile.toAbsolutePath.toFile //Here's where I get an exception
    //do stuff with that
  }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我使用classFile.toFileor 时classFile.toAbsolutePath.toFile,我得到一个UnsupportedOperationException,我猜这是因为它不是物理文件。但是,我需要一个File对象变成一个InputStream并读取。如何获取File属于 JDK 的某个模块(或每个模块)中每个类文件的对象?

java java-11

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

计算树的深度和后代

你们能帮我用算法来做这些事情吗?我已经实现了前序、中序和后序,并且我得到了使用这些命令之一遍历树的提示。我正在使用 dotty 来标记(或“访问”)节点。

深度是从根到底部叶子的边数,所以每次移动时,我都会在深度上加+1?类似的东西?

不知道后代的算法。他们正在询问特定节点在其自身下的节点数。

顺便说一句,这些是普通的树。

c++ tree depth

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

类型转换时的不一致(错误:类型不兼容)

这个程序编译没有任何问题。


interface X{}
class A{
    public void mA(){
        System.out.println("mA of A");
    }
}
class Demo{
    public static void main(String args[]){
        X  ob=null;
        A a1=null;

        ob=(X) a1; //Legal
        a1=(A)ob; //Legal
    }
}
Run Code Online (Sandbox Code Playgroud)

但是下面的代码有问题?


interface X{}
final class A{
    public void mA(){
        System.out.println("mA of A");
    }
}
class Demo{
    public static void main(String args[]){
        X  ob=null;
        A a1=null;

        ob=(X) a1; //Illegal
        a1=(A)ob; //Illegal
    }
}

Run Code Online (Sandbox Code Playgroud)
Error:
 error: incompatible types: A cannot be converted to X
 ob=(X) a1; //Illegal
            ^
1 error
Compilation …
Run Code Online (Sandbox Code Playgroud)

java methods compiler-errors interface class

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