我正在尝试以不同的方式重写简单的函数,但我显然误解了一些核心概念。有没有更好的方法来处理像这样的有限类型?
mlength :: Monoid m => m -> Int
mlength mempty = 0
mlength (l <> r) = mlength l + mlength r
Run Code Online (Sandbox Code Playgroud)
编译失败并出现以下错误:
Parse error in pattern: l <> r
Run Code Online (Sandbox Code Playgroud)
我可以看到我的用法<>是错误的,因为有多个正确的匹配l和r。尽管看起来分配哪个值并不重要,但最终仍然必须分配一个值。也许有一种方法可以让我为特定的 Monoid 实例断言这个决定?
"ab" == "" <> "ab"
"ab" == "a" <> "b"
"ab" == "ab" <> ""
Run Code Online (Sandbox Code Playgroud) 我正在尝试访问我之前使用过的Twitter流,而不正确地使用Tweepy.现在我了解了如何使用Tweepy,我编写了以下Stream.py模块.当我运行它时,我收到错误代码401,它告诉我我的身份验证已被拒绝.但我之前使用相同的消费者令牌和秘密工作.有任何想法吗?
from tweepy.streaming import StreamListener
from tweepy import OAuthHandler
from tweepy import Stream
from tweepy import TweepError
from tweepy import error
#Removed. I have real keys and tokens
consumer_key = "***"
consumer_secret = "***"
access_token="***"
access_token_secret="***"
class CustomListener(StreamListener):
""" A listener handles tweets are the received from the stream.
This is a basic listener that just prints received tweets to stdout."""
def on_status(self, status):
# Do things with the post received. Post is the status object.
print status.text
return True …Run Code Online (Sandbox Code Playgroud) 我正在使用其POJO处理程序构建一个AWS lambda函数,但是对RequestHandler接口进行抽象会导致擦除的类型。发生这种情况时,AWS无法转换为我的lambda函数的输入类型:
java.util.LinkedHashMap cannot be cast to com.amazonaws.services.lambda.runtime.events.SNSEvent: java.lang.ClassCastException
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.amazonaws.services.lambda.runtime.events.SNSEvent
Run Code Online (Sandbox Code Playgroud)
以下代码在上载到AWS时适用:
import com.amazonaws.services.lambda.runtime._
import com.amazonaws.services.lambda.runtime.events.SNSEvent
// Only working version
class PojoTest1 extends Handler1[SNSEvent]{
override def handleRequest(input: SNSEvent, context: Context): Unit =
println(s"message: ${input.getRecords.get(0).getSNS.getMessage}")
}
trait Handler1[Event] extends RequestHandler[Event, Unit]{
override def handleRequest(input: Event, context: Context): Unit
}
Run Code Online (Sandbox Code Playgroud)
现在,因为我正在使用Scala,所以我将抽象化具有通用特征的Java RequestHandler。以下是无效的缩小示例:
// Doesn't work
class PojoTest2 extends Handler2[SNSEvent]{
override def act(input: SNSEvent): Unit =
println(s"message: ${input.getRecords.get(0).getSNS.getMessage}")
}
trait Handler2[Event] extends RequestHandler[Event, Unit]{ …Run Code Online (Sandbox Code Playgroud) 我有两组测试,一组需要与JVM -javaagent集一起运行,而另一组则需要未设置它。我Groups习惯在单独的JVM上运行,并且可以看到两个Java进程都已启动。通过使用jps -lvm我可以看到没有JVM运行带有该-javaagent标志。
build.sbt:
lazy val myProject = (project in file("."))
.settings(
resolvers ++= Build.resolvers,
libraryDependencies ++= Build.dependencies,
fork in Test := true,
testGrouping := groupByJavaAgent((definedTests in Test).value),
tags in test += Tags.ForkedTestGroup -> 4
)
val home = System.getProperty("user.home")
val jammForkOpts = ForkOptions()
.withRunJVMOptions(Vector(s"-javaagent:$home/.ivy2/cache/com.github.jbellis/jamm/jars/jamm-0.3.3.jar"))
def groupByJavaAgent(allTests: Seq[TestDefinition]) = allTests
.groupBy(t => if(t.name.contains("no javaagent")) ("NoJamm", ForkOptions())
else ("Jamm", jammForkOpts))
.map { case ((gName, opts), tests) => Group(gName, tests, SubProcess(opts)) }
.toSeq
Run Code Online (Sandbox Code Playgroud)
sbt …
我希望字段"children"包含具有包含对象类型的对象列表.但是,当继承时,由于向下转换,我会收到错误.我可以使用哪些策略来保持层次结构,但能够适当地访问子对象?
public class Node<T>{
protected T value;
protected Node<T> parent;
private ArrayList<Node<T>> children;
public Node(T value){
this.value = value;
this.children = new ArrayList<Node<T>>();
}
public ArrayList<Node<T>> getChildren(){
return this.children;
}
//...other methods...//
}
Run Code Online (Sandbox Code Playgroud)
当我尝试在这个类中调用getChildren()时,我得到一个"类型不匹配"错误,因为它正在尝试向下转换.
public class DecidableTree<T extends Decidable<T>> extends Node<T>{
public DecidableTree(T value) {
super(value);
}
public randomInvolvedFunction(){
//...other code...//
for(DecidableTree<T> child : this.getChildren()){
child.decidableTreeSpecificMethod();
}
//...other code...//
}
//...other methods...//
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我不能只重写getChildren()函数,因为返回类型必须匹配.
scala ×2
aws-lambda ×1
generics ×1
haskell ×1
inheritance ×1
java ×1
python ×1
sbt ×1
tweepy ×1
twitter ×1