请参阅以下代码段:
trait Fruit {
val color:String
def == (fruit:Fruit) = this.color == fruit.color
}
case class Orange(color:String) extends Fruit
case class Apple(color:String) extends Fruit
Run Code Online (Sandbox Code Playgroud)
正如所料,Orange("red") == Orange("red")是true.但是,我想强制说只能比较相同类型的水果,所以例如Orange("red") == Apple("red")应该给出错误.我们能否以优雅的方式==在特征的签名中强制执行此操作Fruit?
编辑:我想在编译时捕获错误,而不是在运行时.
我们可以使用反射来获取方法名称,如下所示:
object Foo { def bar(name:String, age:Int) = {} }
val foo = Foo.getClass
val methods = foo.getMethods.filter(_.getName.startsWith("b"))
methods.foreach(m => println(m.getName))
Run Code Online (Sandbox Code Playgroud)
我现在需要获取参数类型和名称.
String和/或Array[String]类型参数的函数感兴趣.[编辑:] Java版本的解决方案也行.
[编辑:]注释似乎是一种方法.但是,Scala注释支持并不是那么好.相关的问题.
假设我有一个方法
def f(s:String *) = s.foreach( x => println(x) )
Run Code Online (Sandbox Code Playgroud)
现在我有一个数组:
val a = Array("1", "2", "3")
Run Code Online (Sandbox Code Playgroud)
如何f使用aas参数的元素调用?
编辑:
所以a,我想做以下事情:
f(a(0), a(1), a(2)) // f("1", "2", "3")
Run Code Online (Sandbox Code Playgroud) test1.scala使用以下代码创建文件:
package test
import java.io.FileInputStream
object Foo
Run Code Online (Sandbox Code Playgroud)
test2.scala使用以下代码创建另一个文件:
package test.java
object Bar
Run Code Online (Sandbox Code Playgroud)
现在编译为scalac test1.scala test2.scala:
我们得到错误:
test.scala:2: error: object io is not a member of package test.java
import java.io.FileInputStream
^
one error found
Run Code Online (Sandbox Code Playgroud)
我认为错误是因为Scala认为java上面指的是包test.java.除了重命名包之外,如何解决这个问题?
我有一节课,
class MyClass {
private int val;
public static final MyClass myObject = new MyClass(1);
MyClass(int a){
val = a;
}
public int getVal(){
return val;
}
public MyClass func1(){
MyClass temp = myObject;
temp.val = 2;
return temp;
}
public static void main(String [] args){
MyClass x = new MyClass(4);
System.out.println(myObject.getVal());
x.func1();
System.out.println(myObject.getVal());
}
}
Run Code Online (Sandbox Code Playgroud)
它打印:
1
2
Run Code Online (Sandbox Code Playgroud)
我期待它打印:
1
1
Run Code Online (Sandbox Code Playgroud)
对我来说似乎存在根本的误解.我期待这myObject是一个final static值不能被改变,当我这样做MyClass temp = myObject,我创建了一个名为新的对象temp类型MyClass和值分配myObject到这个新创建的对象.如果我错了,请纠正我.似乎没有创建新对象,temp …
我有一个用Scala编写的servlet.我在那里有一些这样的代码:
def message = <HTML><HEAD><TITLE>Test</TITLE></HEAD><BODY>{value}</BODY></HTML>
def value = "Hello <BR/> World"
Run Code Online (Sandbox Code Playgroud)
生成的相应HTML代码value是
Hello <BR/> World
Run Code Online (Sandbox Code Playgroud)
如何让它生成HTML代码(如下所示)?
Hello <BR/> World
Run Code Online (Sandbox Code Playgroud)
提前致谢
限定:
val x = List(1, 2, 3, 4)
Run Code Online (Sandbox Code Playgroud)
我想找到是否x包含1或3.一种方法是
x.contains(1) || x.contains(3)
Run Code Online (Sandbox Code Playgroud)
另一个是
x.exists(y => y == 1 || y == 3)
Run Code Online (Sandbox Code Playgroud)
另一个是:
x.exists(List(1,3).contains(_))
Run Code Online (Sandbox Code Playgroud)
我会更喜欢类似的东西
x.containsAnyOf(1, 3)
Run Code Online (Sandbox Code Playgroud)
请注意,x.containsSlice在这种情况下不起作用.
有更好的解决方案吗?
在Cloudfoundry中,应用程序容器中没有持久的文件系统存储.标准建议是使用DB,但我有一个特定的场景,需要写入持久文件.我使用第三方应用程序,需要在文件中存储配置数据.我可以选择文件路径,但我不能覆盖持久文件存储要求.
是否有任何库可以将文件系统抽象为Java,并实际存储在Amazon S3上?
它只是一个单独的文件,随着我们的进展而建立起来.文件大小约为1 MB,但可能会达到几MB.
几乎每个 Scala 版本都以非向后兼容的方式更改了集合转换的方式。是否有更好的解决方案,与版本无关并且不依赖于 Scala 发行版?
我不介意使用一些第三方库。
scala ×7
java ×5
scala-2.9 ×2
constructor ×1
dataflow ×1
html ×1
new-operator ×1
reflection ×1
scala-2.11 ×1
scala-2.12 ×1
scala-2.13 ×1
scala-2.8 ×1
servlets ×1
static ×1