我是Scala的新手,我真的找不到关于这个type关键字的很多东西.我想了解下面的表达式可能意味着什么:
type FunctorType = (LocalDate, HolidayCalendar, Int, Boolean) => LocalDate
Run Code Online (Sandbox Code Playgroud)
FunctorType 是某种别名,但它意味着什么?
我有scala函数,如下所示:
现在,根据T的类型(在我的情况下,它可以是Double,Boolean和LocalDate),我需要应用函数ob.像这样的东西(我知道代码没有任何意义,但我想传达我的意思):
def X[T](ob: Observable[T]): Observable[T] = {
//code
T match {
case Double => DoSomething1(ob:Observable[Double]):Observable[Double]
case Boolean => DoSomething2(ob:Observable[Boolean]):Observable[Boolean]
case LocalDate => DoSomething3(ob:Observable[LocalDate]):Observable[LocalDate]
}
}
Run Code Online (Sandbox Code Playgroud)
考虑到Scala的Erasure属性,可以用某种方式反射来完成工作吗?它甚至可能吗?
每次我运行某个程序时,其他程序的上一次运行的输出似乎被新输出覆盖.有没有办法看到以前运行的程序的输出?
编译器如何解释这个?:
foo match {
case bar: Bar => println("First case statement")
case _ =>
}
Run Code Online (Sandbox Code Playgroud)
第二种情况是空的,没有任何回报.
我需要在scala中创建一个函数,给定一系列日期,给出一个范围列表.我在Scala中相对较新,我无法弄清楚如何为相同的'for'循环编写.这是我到目前为止所做的:
def calculateDates(from: LocalDate, until: LocalDate): Seq[LocalDate] = {
var dateArray = []
//for (LocalDate date <- from; !date.isAfter(to); date <- date.plusDays(1))
for(date <- from to until)
{
dateArray :+ date
}
return dateArray
}
Run Code Online (Sandbox Code Playgroud)
我不知道如何迭代范围.
我想在一个Map中找到一个键,给出一个值.我正在使用'find'函数,因为它无法为它找出正确的谓词:
val colors = Map(1 -> "red", 2 -> "blue")
def keyForValue(map: Map[Int, String], value: String) = {
val bool = map.find{map.foreach{map.values(i) == value}}
bool.key
}
Run Code Online (Sandbox Code Playgroud)
当我知道值时,如何迭代地图并找到密钥?
我正在处理一些脚本(在我工作的公司中),这些脚本被加载/卸载到虚拟机管理程序中,以便在事件发生时触发一段代码.实际卸载脚本的唯一方法是点击Ctrl- C.我正在用Python编写一个自动化过程的函数
一旦它看到"done"程序输出中的字符串,就应该杀掉它vprobe.我subprocess.Popen用来执行命令:
lineList = buff.readlines()
cmd = "vprobe /vprobe/myhello.emt"
p = subprocess.Popen(args = cmd, shell=True,stdout = buff, universal_newlines = True,preexec_fn=os.setsid)
while not re.search("done",lineList[-1]):
print "waiting"
os.kill(p.pid,signal.CTRL_C_EVENT)
Run Code Online (Sandbox Code Playgroud)
如您所见,我正在buff以读/写模式打开文件描述符中的输出.我检查最后一行; 如果它有'done',我杀了它.不幸的是,CTRL_C_EVENT它仅适用于Windows.我能为Linux做些什么?
我的scala测试文件中有很多nullary方法(带0参数的方法).因此,而不是将它们写成:
def fooBar() = //
Run Code Online (Sandbox Code Playgroud)
我把它们写成:
def fooBar = //
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我收到以下警告:
Warning:(22, 7) side-effecting nullary methods are discouraged: suggest defining as `def fooBar()` instead
Run Code Online (Sandbox Code Playgroud)
警告的含义是什么?我使用intelliJ作为我的IDE,并且在网上找不到这个警告.
编辑
而且,我忘了提及,当我使用括号时,警告不会出现.
为什么建议在Scala中使用==而不是.equals字符串比较?StackOverflow中有很多问题不建议在Java中使用引用等式进行字符串比较,但为什么建议在Scala中进行完全相反的操作呢?
我试图合并两个序列,使它们保持排序.以下是我编写的代码:
val seq1 = Seq(1,3,5,7,9)
val seq2 = Seq(2,4,6,8)
var arr = Seq[Int]()
for(b <- seq2)
{
for(a <- seq1)
{
if(a < b)
arr = arr :+ a
else
{
arr = arr :+ b;break;
}
}
}
println(arr)
Run Code Online (Sandbox Code Playgroud)
我需要的输出需要:
Seq(1,2,3,4,5,6,7,8,9)
Run Code Online (Sandbox Code Playgroud)
但似乎break在Scala中不起作用.我对这门语言比较陌生.执行此操作的最佳方法是什么?