在学习 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这里发生了什么?
intJava中将两个s相除并没有什么特别之处。除非处理两种特殊情况之一:
ArithmeticException)Integer.MIN_VALUE / -1,JVMS 要求结果等于Integer.MIN_VALUE)(这个问题只针对这种情况)。有一种特殊情况不满足此规则:如果被除数是该
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) 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) 我测试了以下结构类型的代码:
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 方式。
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) 我正在尝试从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 的某个模块(或每个模块)中每个类文件的对象?
你们能帮我用算法来做这些事情吗?我已经实现了前序、中序和后序,并且我得到了使用这些命令之一遍历树的提示。我正在使用 dotty 来标记(或“访问”)节点。
深度是从根到底部叶子的边数,所以每次移动时,我都会在深度上加+1?类似的东西?
不知道后代的算法。他们正在询问特定节点在其自身下的节点数。
顺便说一句,这些是普通的树。
这个程序编译没有任何问题。
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)