给定以下具有可选参数的函数:
def foo(a:Int = 1, b:Int = 2, c:Int = 3) ...
Run Code Online (Sandbox Code Playgroud)
我想保持默认值一但通过新的值b和c ^只有位置分配(而不是由一个名为分配),这是任何以下语法将是很好的:
foo( , 5, 7)
foo(_, 5, 7)
Run Code Online (Sandbox Code Playgroud)
Scala有可能实现这样吗?
在学习的过程中scala我偶然发现了以下奇怪的片段:
package temptests
object TempTest {
//def 2 = 123 // does not compile
val 2 = 123 // compiles, but leads to an exception at runtime
def main(args: Array[String]) = { // just do something to load this class
println("Hello")
}
}
Run Code Online (Sandbox Code Playgroud)
我希望编译器会抛出错误,val 2 = 123因为标识符不能以数字开头,但代码编译时没有警告.但是,在运行时它会立即抛出异常:
异常线程 "main" java.lang.ExceptionInInitializerError在temptests.TempTest.main(TempTest.scala)在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at com.intellij.rt.execution.application.AppMain.main(AppMain.java: 144)引起:scala.MatchError:123(类java.lang.Integer)temptests.TempTest $.(TempTest.scala:5)temptests.TempTest $.(TempTest.scala)... 6更多
我只是好奇:怎么val 2 = 123理解Scala?为什么没有编译时错误?
在键控流上,我想为每个新传入事件计算一次窗口函数,新事件一到达就立即计算,同时为它提供过去 30 天内该键的所有早期事件的上下文作为迭代器.
预期行为类似于具有 30 天长度和 1 纳秒滑动的滑动窗口,每个传入事件仅计算一次窗口函数。
我看不到如何将此行为映射到带有/不带有触发器/驱逐器等的内置翻滚/滑动/会话窗口之上。
有人可以帮忙吗?或者这是否需要编写我自己的窗口分配器或我自己的键控状态处理?
为什么下面的代码不选择最接近的超类型的隐式val?
class A
class B extends A
trait TC[-T] { def show(t: T): String }
implicit val showA = new TC[A] { def show(a: A): String = "it's A" }
implicit val showB = new TC[B] { def show(b: B): String = "it's B" }
def doit[X](x: X)(implicit tc: TC[X]): Unit = println(tc.show(x))
doit(new A) // "it's A" as expected
doit(new B) // "it's A" ... why does this not give "it's B" ???
Run Code Online (Sandbox Code Playgroud)
如果使TC不变(即trait TC[T] (...) …
我“只是”想编写一个静态泛型方法,该方法将Collection<E>任何类型的泛型E作为其输入,并输出适当类型的结果Vector<E>。由于类型E在编译时始终已知,因此这不应该是问题 - 但它是......因此,稍后的调用应如下所示:
Collection<String> coll = ...
Vector<String> vec = Convert.toVector(coll); // either this or...
Vector<String> vec = Convert<String>.toVector(coll);
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的 - 都没有成功:
import java.util.Collection;
import java.util.Vector;
public class Convert<E> {
// 1st try, same type E as class => Error: Cannot make a static reference to the non-static type E
public static Vector<E> toVector1(Collection<E> coll) {
return new Vector<E>();
}
// 2nd try, a new type X. => Error: X cannot be …Run Code Online (Sandbox Code Playgroud) 我的目标是在所有出现的"yy"中分割一个字符串(使用Java或Scala),这些字符串既没有被跟随也没有另一个字母"y".例子:
"aa-yy-bb" -> ["aa-", "-bb"]
"aa-yyyy-bb" -> ["aa-yyyy-bb"]
"yyy-bb" -> ["yyy-bb"]
"yy-bb" -> ["","-bb"]
"aa-yy-bb-yy" -> ["aa-","-bb-",""]
Run Code Online (Sandbox Code Playgroud)
我结束了,mystring.split("(^|[^y])yy([^y]|$)", -1)但这个解决方案是无效的,因为它丢弃任何相邻的字符,例如,它输出"aa-yy-bb" -> ["aa", "bb"].
当然,这种拆分可以通过手动解析来解决,但我想知道是否存在(优雅的)模式匹配解决方案.你能找到一些吗?