我对Tikz/Latex有以下问题:
我有一些包含文本的节点.大多数文本没有低于基线的字母.但对于发生这种情况的节点,节点高度和文本/基线的比率和位置是关闭的.看看示例图像.
我知道的解决方案:
在集合上滑动的方法返回给定大小的滑动窗口,其形式为X[Iterable[A]]X是集合的类型,A是元素类型.我经常需要两三个元素,我更喜欢将它们命名.一个丑陋的解决方法sliding(2)是:
points.sliding(2).foreach{ twoPoints =>
val (p1,p2) = (twoPoints.head,twoPoints.last)
//do something
}
Run Code Online (Sandbox Code Playgroud)
这很糟糕,只适用于两个元素.另请注意
(a,b) = (twoPoints(0),twoPoints(1))
Run Code Online (Sandbox Code Playgroud)
不起作用.
我目前正在使用IDEA的构建机制和fsc一起使用Scala进行开发.它仍然有点慢,不得不(重新)启动编译服务器是一件痛苦的事.这里有很多人建议将SBT与IDEA一起作为构建工具.
您如何看待每种方法的优缺点?
在查看一些Scala库的来源时,例如无形,我经常会找到名为的特征LowPriorityImplicits.
你能解释一下这种模式吗?解决了什么问题,模式如何解决?
什么是使我的解析器尊重(忽略)C风格注释的最简单方法.我对两种评论类型都感兴趣,但也欢迎只有一种类型的解决方案.
我目前只是在扩展JavaTokenParsers.
我有一个基于Javascript的机器人用于Xat聊天室,它也可以充当AI.我最近决定重做它的AI部分,因为它成为一个绝对庞大的else if声明链,变得几乎不可能使用.
我做了一些研究,并提出了如何处理响应的新想法.我先给你代码段:
function msgSwitch(id,msgRes) {
var botResponse = [];
switch (msgRes) {
case (msgRes.indexOf("hi") !=-1):
botResponse.push("HELLO. ");
case (msgRes.indexOf("how are you") !=-1):
botResponse.push("I AM FINE. ")
case (msgRes.indexOf("do you like pie") !=-1):
botResponse.push("I CAN'T EAT. THANKS, ASSHAT. ")
default:
respond (botResponse);
spamCount(id);
break;
}
}
Run Code Online (Sandbox Code Playgroud)
这里的想法是检查msgRes(用户的输入)并查看它匹配的案例数量.然后对于每个匹配,它将push响应到botResponse数组中,然后在结束时,它将回复该数组中的所有消息.
例
用户信息: Hi! How are you?
msgRes: hi how are you
机器人比赛:
hi>推HELLO.送到阵列
how are you>推I AM FINE.送到阵列
机器人回应: …
正如Scala邮件列表中的这个帖子所要求的那样,我如何创建一个继承父程序类路径的嵌入式Scala REPL?假设父Scala程序是使用启动的scala -cp <classpath> ...; 可以<classpath>作为字符串访问并用于初始化嵌入的REPL?(可用的Java类路径System.getProperty("java.class.path")似乎与Scala类路径不同.)
或者,也许嵌入式Scala REPL可以从父进程继承或构造其ClassLoader(MichaelDürig的ScalaDays 2010谈话可能是相关的).这是推荐的方法吗?
或者如何在映射时避免意外删除重复项Set?
这是我经常犯的错误.看下面的代码:
def countSubelements[A](sl: Set[List[A]]): Int = sl.map(_.size).sum
Run Code Online (Sandbox Code Playgroud)
该函数应计算所有包含列表的累计大小.问题是在将列表映射到它们的长度之后,结果仍然是a,Set并且所有大小为1的列表都减少为单个代表.
这只是我有这个问题吗?我能做些什么来防止这种情况发生?我想我很想有两种方法mapToSet,并mapToSeq为Set.但是没有办法强制执行此操作,有时您不会在本地注意到您正在使用Set.
也许你甚至有可能Seq在另一个类中编写代码以及某些更改并且底层对象变成了Set?
也许是最好的做法,不要让这种情况出现?
想象一下以下情况:
val totalEdges = graph.nodes.map(_.getEdges).map(_.size).sum / 2
Run Code Online (Sandbox Code Playgroud)
您Node从图形中获取对象的集合,使用它们来获取它们的相邻边缘并对它们求和.如果graph.nodes返回a,则有效Seq.
如果某人决定将Graph其节点作为一个返回,它就会中断Set; 没有这个代码看起来可疑(至少不是我,你认为每个集合可能最终成为一个Set?)而不触及它.
我有功能A => Double.我想检查两个这样的函数是否beCloseTo为给定的值集给出相同的结果(使用现有匹配器的公差).
我希望能够写:
type TF = A => Double
(f: TF) must computeSameResultsAs(g: TF,tolerance: Double, tests: Set[A])
Run Code Online (Sandbox Code Playgroud)
我想以模块化的方式构建这个匹配器,而不是简单地Matcher[TF]从头开始编写.
如果我能写的话可能会更好:
(f: TF) must computeSameResultsAs(g: TF)
.withTolerance(tolerance)
.onValues(tests: Set[A])
Run Code Online (Sandbox Code Playgroud)
我还想在匹配器失败时获得合理的描述.
睡了之后我想出了以下内容.
def computeSameResultsAs[A](ref: A => Double, tolerance: Double, args: Set[A]): Matcher[A => Double] =
args.map(beCloseOnArg(ref, tolerance, _)).reduce(_ and _)
def beCloseOnArg[A](ref: A => Double, tolerance: Double, arg: A): Matcher[A => Double] =
closeTo(ref(arg), tolerance) ^^ ((_: A => Double).apply(arg))
Run Code Online (Sandbox Code Playgroud)
这比Eric的解决方案短得多,但没有提供良好的失败信息.我希望能够在第二种方法中重命名映射值.像下面的东西(不编译).
def beCloseOnArg[A](ref: A => …Run Code Online (Sandbox Code Playgroud) 我有一个与收集monad非常相似的monad.我正在尝试为它实现monad变换器,但我失败了.
我已经看过6和7 中的ListT实现Scalaz,但我无法理解它是如何工作的.它使用了一些其他类型Step,我的目的不明确.
那么有人可以向我解释如何通过解释Scalaz方法或使用不同的实现来实现列表monad转换器?
scala ×8
collections ×1
javascript ×1
latex ×1
parsing ×1
sbt ×1
scalaz ×1
shapeless ×1
specs ×1
specs2 ×1
tampermonkey ×1
tikz ×1