我理解显式类型自引用的用法:
trait T {
self : T2 =>
...
}
Run Code Online (Sandbox Code Playgroud)
在体内,self是别名,this但具有更精确的类型T with T2.
现在,我在代码中看到了这个:
trait T {
self =>
...
}
Run Code Online (Sandbox Code Playgroud)
也就是说,没有其他类型信息的显式自引用.在这种配置中,是否存在self不仅仅是别名的情况this?
我有一个有时间(分钟和秒)的文件,看起来大致如下:
02:53 rest of line 1...
03:10 rest of line 2...
05:34 rest of line 3...
05:35 rest of line 4...
10:02 rest of line 5...
...
Run Code Online (Sandbox Code Playgroud)
我想在几秒钟内将时间替换为等效时间.理想情况下,我想运行这样一个神奇的命令:
:%s/^\(\d\d\):\(\d\d\) \(.*\)/(=\1*60 + \2) \3/g
Run Code Online (Sandbox Code Playgroud)
......这(=\1*60 + \2)是神奇的部分.我知道我可以使用特殊寄存器插入评估结果=,但有没有办法在正则表达式的替代部分执行此操作?
我有一个地图,SomeClass -> Double我希望得到SomeClass与最小值相关联.我该怎么做呢?关系并不重要,如果这是一个问题,可以任意打破.
说我有一个属性的特征a:
trait TheTrait {
def a: String
}
Run Code Online (Sandbox Code Playgroud)
我有一个属性的类a,我想匿名实例化该特征:
class TheClass {
val a = "abc"
val traitInstance = new TheTrait {
def a = a // I want to assign it to the `a` of TheClass here
// but this way it doesn't work
}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我经常从shell(在我的情况下是Bash)执行命令,我想立即分叉并且我想忽略它的输出.事实上,我经常创建一个脚本(silent)来执行它:
#!/bin/bash
$@ &> /dev/null &
Run Code Online (Sandbox Code Playgroud)
然后,我可以跑,例如
silent inkscape myfile.svg
Run Code Online (Sandbox Code Playgroud)
并且我的终端不会受到我刚刚分叉的进程的调试输出的污染.
我有两个问题:
是否有"官方"的方式来做这件事?,即更短但相当于&> /dev/null &?
如果没有,是否有一种方法可以在我的silent命令之后使标签完成工作,就像它不在那里一样?举个例子,在我输入之后silent inksc,我希望bash silent inkscape在我按下时自动完成命令[tab].
在Scala中,我将Date转换为Timestamp.我目前正在这样做:
val date = new java.util.Date()
new java.sql.Timestamp(new org.joda.time.DateTime(date).getMillis)
Run Code Online (Sandbox Code Playgroud)
这样做有一种更明智的方式吗?Java知情的回复也是相关的.
我正在寻找一种方法,让类的行为就像case类一样,但是它们会自动散列为hash.
实现整数列表的一种方法是:
import scala.collection.mutable.{Map=>MutableMap}
sealed abstract class List
class Cons(val head: Int, val tail: List) extends List
case object Nil extends List
object Cons {
val cache : MutableMap[(Int,List),Cons] = MutableMap.empty
def apply(head : Int, tail : List) = cache.getOrElse((head,tail), {
val newCons = new Cons(head, tail)
cache((head,tail)) = newCons
newCons
})
def unapply(lst : List) : Option[(Int,List)] = {
if (lst != null && lst.isInstanceOf[Cons]) {
val asCons = lst.asInstanceOf[Cons]
Some((asCons.head, asCons.tail))
} else None
}
} …Run Code Online (Sandbox Code Playgroud) 我有一个脚本,它搜索包含特定文件的目录,从当前目录开始并上到树(考虑尝试找出.git目录所在的位置).
我的方法看起来像这样:
def getDir(self,cwd):
path = os.path.abspath(cwd)
if not os.path.isdir(path):
raise RuntimeError("getDir should not be run on files")
if FILE in os.listdir(path):
return path
parent = os.path.join(path, os.path.pardir)
if os.access(parent, os.R_OK) and os.access(parent, os.X_OK):
return self.getDir(parent)
else
return None
Run Code Online (Sandbox Code Playgroud)
现在这个方法的问题是,如果它找不到目录,它会循环(并最终堆栈溢出),因为显然加入/并再次..给你/.我尝试path与parent他们或他们的reprs 进行比较,但这不起作用(他们总是截然不同).我现在的解决方法是在递归方法中包含深度计数器并停在某个随机最大阈值处.
我的问题是,是否有一种可靠的跨平台方式来检查我是否已到达文件系统中的根目录?
我有一个项目,生成一个共享库,该库链接到另一个共享库.
当我编译并使用gcc 4.4链接它时,一切正常:
ldd libmyproject.so 正确报告与其他共享库的依赖关系.当我编译并用gcc 4.5链接时,另一方面(具有完全相同的标志),我有以下症状:
ldd并且看不到连接时,这个表现本身,当我尝试使用它时:当它与gcc 4.4一起使用时,它在运行时崩溃与gcc崩溃4.5带有"未找到符号"错误(当然来自其他lib).我查看了发行说明,我的直觉是它与新的链接时优化有关,但我无法理解它们的详细信息.
有没有人遇到类似的情况和/或有任何建议?
(注意,4.6的结果外观与4.5相同).
我试图证明列表中的大小(元素数量)是非负的,但莱昂未能证明它 - 它只是超时.莱昂真的没有能力证明这个属性,还是我错误地使用它?我的出发点是我在文章"莱昂验证系统概述"中读到的一个功能.
import leon.lang._
import leon.annotation._
object ListSize {
sealed abstract class List
case class Cons(head: Int, tail: List) extends List
case object Nil extends List
def size(l: List) : Int = (l match {
case Nil => 0
case Cons(_, t) => 1 + size(t)
}) ensuring(_ >= 0)
}
Run Code Online (Sandbox Code Playgroud) scala ×6
autocomplete ×1
bash ×1
case-class ×1
command-line ×1
date ×1
evaluation ×1
gcc ×1
java ×1
leon ×1
linker ×1
python ×1
regex ×1
self-type ×1
shell ×1
timestamp ×1
vim ×1