小编cod*_*dle的帖子

如何为所有 Monoid 编写长度函数

我正在尝试以不同的方式重写简单的函数,但我显然误解了一些核心概念。有没有更好的方法来处理像这样的有限类型?

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)

我可以看到我的用法<>是错误的,因为有多个正确的匹配lr。尽管看起来分配哪个值并不重要,但最终仍然必须分配一个值。也许有一种方法可以让我为特定的 Monoid 实例断言这个决定?

"ab" == ""   <> "ab" 
"ab" == "a"  <> "b" 
"ab" == "ab" <> ""
Run Code Online (Sandbox Code Playgroud)

haskell

8
推荐指数
2
解决办法
184
查看次数

使用Tweepy的Twitter Streaming API拒绝oauth

我正在尝试访问我之前使用过的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)

python twitter tweepy twitter-streaming-api

5
推荐指数
1
解决办法
1485
查看次数

AWS Lambda处理程序抛出带有Scala泛型的ClassCastException

我正在使用其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)

scala amazon-web-services aws-lambda

5
推荐指数
1
解决办法
333
查看次数

在build.sbt中为分叉测试设置JVM选项

我有两组测试,一组需要与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 …

scala sbt

5
推荐指数
1
解决办法
81
查看次数

如何在Java中处理自引用和继承

我希望字段"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()函数,因为返回类型必须匹配.

java generics inheritance

4
推荐指数
1
解决办法
943
查看次数