我似乎真的不了解Map和FlatMap.我无法理解的是for-comprehension是如何嵌套调用map和flatMap的.以下示例来自Scala中的Functional Programming
def bothMatch(pat:String,pat2:String,s:String):Option[Boolean] = for {
f <- mkMatcher(pat)
g <- mkMatcher(pat2)
} yield f(s) && g(s)
Run Code Online (Sandbox Code Playgroud)
翻译成
def bothMatch(pat:String,pat2:String,s:String):Option[Boolean] =
mkMatcher(pat) flatMap (f =>
mkMatcher(pat2) map (g => f(s) && g(s)))
Run Code Online (Sandbox Code Playgroud)
mkMatcher方法定义如下:
def mkMatcher(pat:String):Option[String => Boolean] =
pattern(pat) map (p => (s:String) => p.matcher(s).matches)
Run Code Online (Sandbox Code Playgroud)
模式方法如下:
import java.util.regex._
def pattern(s:String):Option[Pattern] =
try {
Some(Pattern.compile(s))
}catch{
case e: PatternSyntaxException => None
}
Run Code Online (Sandbox Code Playgroud)
如果有人能够阐明在这里使用map和flatMap背后的理由,那将会很棒.
Shell/Bash中是否有一个快捷方式可以根据正则表达式或其他一些条件重命名文件夹中的所有文件.我在这里寻找的是在我的文件夹文件中,让我们说100个文本文件具有以下命名约定:
<longdocumentidentifier>-doc-<counter>.txt.
Run Code Online (Sandbox Code Playgroud)
我需要使用上面给出的约定将所有文件重命名为:
doc-<counter>.txt
Run Code Online (Sandbox Code Playgroud)
是否有一个可以帮助我完成上述工作的单行程?
你可以在foldRight方面正确折叠左边吗?反过来怎么样?
在作者提供的解决方案中,他们提供了如下实现:
def foldRightViaFoldLeft_1[A,B](l: List[A], z: B)(f: (A,B) => B): B =
foldLeft(l, (b:B) => b)((g,a) => b => g(f(a,b)))(z)
def foldLeftViaFoldRight[A,B](l: List[A], z: B)(f: (B,A) => B): B =
foldRight(l, (b:B) => b)((a,g) => b => g(f(b,a)))(z)
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我追踪这个解决方案并让我理解这实际上是如何实现foldl实现的折叠,反之亦然?
谢谢
functional-programming scala currying fold higher-order-functions
我正在尝试为一个类标记@Autowired写一个单元测试.鉴于Spring正在自动解析这些字段的具体实现,我很难弄清楚如何在测试运行期间插入我的Mock对象(通过EasyMock创建)作为依赖项.在课堂上使用@Autowired意味着在该课程中缺少setter.有没有办法让我插入我的模拟对象而不在课堂上创建额外的setter?
这是我想要完成的一个例子:
public class SomeClassUnderTest implements SomeOtherClass{
@Autowired
private SomeType someType;
@Autowired
private SomeOtherType someOtherType;
@Override
public SomeReturnType someMethodIWouldLikeToTest(){
//Uses someType and someOtherType and returns SomeReturnType
}
}
Run Code Online (Sandbox Code Playgroud)
这是我在碰壁之前制作Test类的方法:
public class MyTestClassForSomeClassUnderTest{
private SomeType someType;
private SomeOtherType someOtherType;
@Before
public void testSetUp(){
SomeClassUnderTest someClassToTest = new SomeClassUnderTest();
someType = EasyMock.createMock(SomeType.class);
someOtherType = EasyMock.createMock(SomeOtherType.class);
//How to set dependencies????
}
@Test
public void TestSomeMethodIWouldLikeToTest(){
//??????
}
}
Run Code Online (Sandbox Code Playgroud)
推动正确的方向将会很棒.
谢谢
我正在尝试使用sbt-assembly将scala项目转换为可部署的胖jar .当我在sbt中运行我的程序集任务时,我收到以下错误:
Merging 'org/apache/commons/logging/impl/SimpleLog.class' with strategy 'deduplicate'
:assembly: deduplicate: different file contents found in the following:
[error] /Users/home/.ivy2/cache/commons-logging/commons-logging/jars/commons-logging-1.1.1.jar:org/apache/commons/logging/impl/SimpleLog.class
[error] /Users/home/.ivy2/cache/org.slf4j/jcl-over-slf4j/jars/jcl-over-slf4j-1.6.4.jar:org/apache/commons/logging/impl/SimpleLog.class
Run Code Online (Sandbox Code Playgroud)
现在来自sbt-assembly文档:
如果多个文件共享相同的相对路径(例如,多个依赖项JAR中名为application.conf的资源),则默认策略是验证所有候选项具有相同的内容,否则出错.可以使用以下内置策略之一或编写自定义策略在每个路径的基础上配置此行为:
MergeStrategy.deduplicate是上面描述的默认值MergeStrategy.first选择classpath顺序中的第一个匹配文件MergeStrategy.last挑选最后一个MergeStrategy.singleOrError在冲突时出现错误消息MergeStrategy.concat简单地连接所有匹配的文件并包含结果MergeStrategy.filterDistinctLines也可以连接,但在此过程中会留下重复的内容MergeStrategy.rename重命名源自jar文件的文件MergeStrategy.discard只是丢弃匹配的文件
通过这个我设置我的build.sbt如下:
import sbt._
import Keys._
import sbtassembly.Plugin._
import AssemblyKeys._
name := "my-project"
version := "0.1"
scalaVersion := "2.9.2"
crossScalaVersions := Seq("2.9.1","2.9.2")
//assemblySettings
seq(assemblySettings: _*)
resolvers ++= Seq(
"Typesafe Releases Repository" at "http://repo.typesafe.com/typesafe/releases/",
"Typesafe Snapshots Repository" at "http://repo.typesafe.com/typesafe/snapshots/",
"Sonatype Repository" at …Run Code Online (Sandbox Code Playgroud) 我正在研究的.NET 3.5应用程序包含许多不同的解决方案.其中一些解决方案由托管代码(C#)组成,其他解决方案包含非托管代码(C++).用C#编写的方法与用C++编写的方法进行通信.我试图追踪这些各种函数之间的依赖关系,我想在包含我的C++函数的解决方案上设置断点.其中一个C#解决方案有启动项目.我在调试模式下运行此解决方案,期望我的非托管代码中的断点将被命中,但没有真正发生.有人可以指导我使用Visual Studio IDE调试混合应用程序的过程吗?
谢谢
在阅读Scala for the Impatient一书时,我遇到了这个问题:
提出一种情况,其中赋值x = y = 1在Scala中有效.(提示:为x选择合适的类型.)
我不确定作者究竟是什么意思.赋值不会返回一个值,所以var x = y = 1应该返回Unit()作为x的值.有人能指出我在这里可能会缺少什么吗?
谢谢
我有一个s3结构如下:
s3bucketname -> List of first level keys -> List of second level keys -> List of third level keys -> Actual file.
Run Code Online (Sandbox Code Playgroud)
我需要做的是,给定s3bucket的名称和第一级密钥的条目,我需要位于第一级密钥下的所有二级密钥的名称.所以基本上如果我们把它看作文件夹,我会得到它的名称和root folder它s3bucketname的一个子文件夹的名称subfolder1,我想列出其中的所有文件夹subfolder1.只是名字,而不是完整的路径.
有人可以指出如何使用亚马逊的java sdk在java中做到这一点吗?
谢谢
我试图摆弄gradle-tomcat-plugin,我在一些预赛中遇到了一些问题.假设我的WAR存在于我的一个文件夹中,为了使用gradles tomcat插件在嵌入式tomcat中运行战争,我需要做些什么?自述文件提到了tomcatRunWar但我在gradle文件中如何使用它有点迷失
任何帮助,将不胜感激.
谢谢
我试图使用xml2js解析和查询xml中的元素.我的xml字符串如下:
var xml = "<config><test>Hello</test><data>SomeData</data></config>";
Run Code Online (Sandbox Code Playgroud)
我想要的是提取值并将其分配给 var extractedData
这是我到目前为止所拥有的:
var parser = new xml2js.Parser();
parser.parseString(xml, function(err,result){
//Extract the value from the data element
extractedData = result['data'];
}
Run Code Online (Sandbox Code Playgroud)
这不起作用.有人可以指出我是如何从我的xml中获取值的吗?
谢谢
这似乎不起作用.有人能告诉我这里可能存在什么问题吗?
scala ×4
java ×2
amazon-s3 ×1
bash ×1
c# ×1
c++ ×1
currying ×1
debugging ×1
deployment ×1
file-io ×1
fold ×1
gradle ×1
javascript ×1
junit ×1
linux ×1
map ×1
mocking ×1
monads ×1
node.js ×1
return-type ×1
return-value ×1
sbt ×1
sbt-assembly ×1
scripting ×1
spring ×1
tomcat ×1
unit-testing ×1
xml ×1
xml-parsing ×1