小编cub*_*uce的帖子

如何跳过Scala中的可选参数?

给定以下具有可选参数的函数:

def foo(a:Int = 1, b:Int = 2, c:Int = 3) ...
Run Code Online (Sandbox Code Playgroud)

我想保持默认值但通过新的值bc ^只有位置分配(而不是由一个名为分配),这是任何以下语法将是很好的:

foo( , 5, 7)
foo(_, 5, 7)
Run Code Online (Sandbox Code Playgroud)

Scala有可能实现这样吗?

scala

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

在为数字文字赋值时,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?为什么没有编译时错误?

scala runtime-error

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

Flink Streaming:如何处理每个事件与过去 30 天的所有事件?

在键控流上,我想为每个新传入事件计算一次窗口函数,新事件一到达就立即计算,同时为它提供过去 30 天内该键的所有早期事件的上下文作为迭代器.

预期行为类似于具有 30 天长度和 1 纳秒滑动的滑动窗口,每个传入事件仅计算一次窗口函数。

我看不到如何将此行为映射到带有/不带有触发器/驱逐器等的内置翻滚/滑动/会话窗口之上。

有人可以帮忙吗?或者这是否需要编写我自己的窗口分配器或我自己的键控状态处理?

apache-flink

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

Scala:将逆变类型作为隐式参数传递会不会选择最接近的超类型?

为什么下面的代码不选择最接近的超类型的隐式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] (...) …

scala implicit contravariance

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

静态泛型方法的返回类型可以取决于其参数吗?

我“只是”想编写一个静态泛型方法,该方法将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)

java generics

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

每当拆分字符恰好出现两次时拆分一个字符串

我的目标是在所有出现的"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"].

当然,这种拆分可以通过手动解析来解决,但我想知道是否存在(优雅的)模式匹配解决方案.你能找到一些吗?

java regex split

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