小编djh*_*rld的帖子

使用Warp/WAI处理POST

如何使用Network.Wai和从POST请求中检索数据Warp

比方说,我有一个简单的网页

....
<form method="POST" action="/handlepost">
    <input name="name" type="text" />
    <input type="submit" />
</form>
....
Run Code Online (Sandbox Code Playgroud)

当用户单击提交时,如何检索此数据?我知道如何获取GET数据(queryString)

例如

app :: Application
app request = case rawPathInfo request of
                   "/" -> return $ displayForm
                   "/handlePost" -> return $ handlepost
                   _ -> return $ notFound

displayForm :: Response
displayForm = ResponseBuilder
    status200
    [("Content-Type", "text/html")] $
    fromByteString "<form method='POST' action='/handlepost'><input name="name" type="text" /><input type='submit'></form>"

handlePost :: Request -> Response
handlePost req = undefined -- how do I examine …
Run Code Online (Sandbox Code Playgroud)

haskell haskell-warp

7
推荐指数
2
解决办法
1723
查看次数

如何验证某些项目是否在列表中?

我试图搞砸了最近出现在Reddit/Hacker News上的' Scala One Liners '事件的haskell .

这是我到目前为止所做的事情(人们可能比我做得好很多,但这些是我初学者的尝试)

https://gist.github.com/1005383

我坚持的是验证项目是否在列表中.基本上Scala的例子就是这个

val wordlist = List("scala", "akka", "play framework", "sbt", "typesafe")
val tweet = "This is an example tweet talking about scala and sbt."
(words.foldLeft(false)( _ || tweet.contains(_) ))
Run Code Online (Sandbox Code Playgroud)

我有点难过在Haskell中如何做到这一点.我知道你可以这样做:

any (=="haskell") $ words "haskell is great!"
Run Code Online (Sandbox Code Playgroud)

要验证其中一个单词是否存在,但Scala示例会询问单词列表中的任何单词是否出现在测试字符串中.

我似乎无法找到一个contains功能或类似的东西.我知道你可能会编写一个函数来完成它,但是这样就无法在一行中完成这项任务.

任何帮助,将不胜感激.

haskell

6
推荐指数
2
解决办法
237
查看次数

用于单元测试的GH-Unit Objective-C代码,为什么我会收到链接错误?

我正试图深入探讨使用Xcode进行单元测试的相当坦率的可怕世界(这似乎是一个错综复杂的过程.)

基本上我有这个测试类,试图测试我的Show.h类

#import <GHUnit/GHUnit.h>
#import "Show.h"
@interface ShowTest : GHTestCase { }
@end

@implementation ShowTest
- (void)testShowCreate
{
    Show *s = [[Show alloc] init];
    GHAssertNotNil(s,@"Was nil.");      
}

@end
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试构建并运行我的测试时,它会因此错误而呻吟: -

未定义的符号:

"_OBJC_CLASS _ $ _ Show",引自:

 __objc_classrefs__DATA@0 in ShowTest.o
Run Code Online (Sandbox Code Playgroud)

ld:找不到符号

collect2:ld返回1退出状态

现在我假设这是一个链接错误.我尝试按照此处说明中的每一步操作: -

http://github.com/gabriel/gh-unit/blob/master/README.md

这些说明的第2步让我困惑: -

在Tar​​get'Test'信息窗口中,常规选项卡:

添加链接库,在Mac OS X 10.5 SDK部分下,选择GHUnit.framework

添加链接库,选择您的项目.

添加直接依赖项,然后选择您的项目.(这将导致您的应用程序或框架在测试目标之前构建.)

当我所有接受它的.dylib,.framework和.o文件时,我应该如何将我的项目添加到链接库列表?

xcode linker unit-testing objective-c gh-unit

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

Haskell中用于正则表达式的"原始"字符串

我似乎在Haskell中创建正则表达式时遇到了麻烦,我正在尝试做的是转换此字符串(它匹配一段文本中的URL)

\b(((\S+)?)(@|mailto\:|(news|(ht|f)tp(s?))\://)\S+)\b
Run Code Online (Sandbox Code Playgroud)

进入正则表达式,麻烦的是我在ghci中不断收到此错误

Prelude Text.RegExp> let a = fromString "\b(((\S+)?)(@|mailto\:|(news|(ht|f)tp(s?))\://)\S+)\b"

<interactive>:1:27:
    lexical error in string/character literal at character 'S'
Run Code Online (Sandbox Code Playgroud)

我猜它失败了因为Haskell不理解\S为转义码.有什么方法可以解决这个问题吗?

在Scala中你可以用3个双引号括起一个字符串,我想知道你是否可以在Haskell中实现类似的东西?

任何帮助,将不胜感激.

regex haskell

5
推荐指数
2
解决办法
1513
查看次数

程序流程 - 如果一个计算失败,则退出操作

对不起,如果这个问题没有任何意义.

我目前正在编写一个小应用程序,我希望将一些函数"链接"起来,形成更广泛的计算.

因此,例如,我有一个函数调用web服务并返回hash-map一个结果,或者nil如果是错误或出错了.链中的下一个函数接受映射并进行一些进一步处理,然后将其传递给下一个函数......依此类推.

问题是,如果第一个函数失败,它将传递nil给下一个函数,并将抛出一个nullpointer(或其他),我不希望它甚至达到这个阶段.换句话说,如果链中的一个项失败,我希望整个计算失败.

例如

;successful computation = function1 returns W -> function2 returns X -> function3 returns Y -> function4 returns Z -> Z
;failed computation = function1 returns W -> function2 returns X -> function3 returns nil -> nil
(-> (function1 "http://webservice.com") (function2) (function3) (function4))
Run Code Online (Sandbox Code Playgroud)

事情是我不想if(nil? arg)在开始的时候乱扔我的每一个功能,理想情况下我想要一个可以照顾我的抽象,但我并没有真正了解Clojure中的可用内容

我正在考虑采用Scala样式Option类型,可以是Some(value)或者None我仍然需要在开始时使用这些检查来丢弃我的代码

任何想法或回复都会非常感激

clojure

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

防止执行未经授权的代码

我正在编写一个接受一系列Clojure表单的应用程序,当它们被评估时,结果将返回到列表中

所以例如输入就是

(data "abc" :identifier)
(data "gee" :identifier)
(content "def" :identifier [1 2 3 4 5])
Run Code Online (Sandbox Code Playgroud)

后端中的函数基本上只是将这些函数转换为Clojure映射,例如

(defn data [text id]
    {:text text :id id})
(defn content [text id cont]
    {:text text :id id :cont cont})
Run Code Online (Sandbox Code Playgroud)

麻烦的是,我现在处理代码的方式是接受输入(-> input read-string eval)并相应地获取内容.这很糟糕,因为任何人都可以(System/exit 1)在输入中添加一个狡猾的东西并关闭JVM

是否有任何方法可以将Clojure表单"白名单",可以在此步骤中执行并将所有令人讨厌的内容列入黑名单?或者我太天真地使用Clojure表单作为数据输入机制?

clojure

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

频道/ Goroutines投掷错误

我目前正在学习本教程http://www.miek.nl/files/go/20120807-go.pdf,第7章讨论了频道/ goroutines

但是,示例代码在运行之后就为我抛出了一个错误.

package main

import (
    "fmt"
    "time"
)

var c chan int

func ready(w string, sec int) {
    time.Sleep(time.Duration(sec) * time.Second)
    fmt.Println(w, "is ready!")
    c <- 1
}

func main() {
    c := make(chan int)
    go ready("Tea", 2)
    go ready("Coffee", 1)
    fmt.Println("Waiting...")
    <-c
    <-c
}
Run Code Online (Sandbox Code Playgroud)

这是执行代码时的输出

daniel:go> go run goroutines.go 
Waiting...
Coffee is ready!
Tea is ready!
throw: all goroutines are asleep - deadlock!

goroutine 1 [chan receive]:
main.main()
    /home/daniel/Dropbox/code/go/goroutines.go:21 +0xee

goroutine 2 [syscall]:
created by …
Run Code Online (Sandbox Code Playgroud)

go

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

正则表达式在Go中不起作用

请原谅我是一个正则表达式的业余爱好者,但我真的很困惑,为什么这不是一段代码在Go中不起作用

package main

import (
    "fmt"
    "regexp"
)

func main() {
    var a string = "parameter=0xFF"
    var regex string = "^.+=\b0x[A-F][A-F]\b$"
    result,err := regexp.MatchString(regex, a)
    fmt.Println(result, err)
}
// output: false <nil>
Run Code Online (Sandbox Code Playgroud)

这似乎在python中正常工作

import re

p = re.compile(r"^.+=\b0x[A-F][A-F]\b$")
m = p.match("parameter=0xFF")
if m is not None:
    print m.group()

// output: parameter=0xFF
Run Code Online (Sandbox Code Playgroud)

我想做的就是匹配输入是否采用格式 <anything>=0x[A-F][A-F]

任何帮助,将不胜感激

regex go

3
推荐指数
2
解决办法
525
查看次数

在Java 8中对具有聚合的多个字段进行分组

我有一个与Web访问记录相关的域对象列表.这些域对象可以扩展到数千个.

我没有资源或要求以原始格式将它们存储在数据库中,因此我希望预先计算聚合并将聚合数据放入数据库中.

我需要聚合在5分钟窗口中传输的总字节数,下面的SQL查询

select 
  round(request_timestamp, '5') as window, --round timestamp to the nearest 5 minute
  cdn, 
  isp, 
  http_result_code, 
  transaction_time, 
  sum(bytes_transferred)
from web_records
group by 
    round(request_timestamp, '5'), 
    cdn, 
    isp, 
    http_result_code, 
    transaction_time
Run Code Online (Sandbox Code Playgroud)

在Java 8我的第一电流刺看起来是这样的,我知道这个解决方案与此类似反应集团由多个字段名在Java 8

Map<Date, Map<String, Map<String, Map<String, Map<String, Integer>>>>>>> aggregatedData =
webRecords
    .stream()
    .collect(Collectors.groupingBy(WebRecord::getFiveMinuteWindow,
               Collectors.groupingBy(WebRecord::getCdn,
                 Collectors.groupingBy(WebRecord::getIsp,
                   Collectors.groupingBy(WebRecord::getResultCode,
                       Collectors.groupingBy(WebRecord::getTxnTime,
                         Collectors.reducing(0,
                                             WebRecord::getReqBytes(),
                                             Integer::sum)))))));
Run Code Online (Sandbox Code Playgroud)

这很有效,但它很难看,所有嵌套的地图都是噩梦!要将地图"展平"或"展开"成行,我必须这样做

for (Date window : aggregatedData.keySet()) {
  for (String cdn : aggregatedData.get(window).keySet()) {
    for (String isp : aggregatedData.get(window).get(cdn).keySet()) {
      for (String resultCode : aggregatedData.get(window).get(cdn).get(isp).keySet()) …
Run Code Online (Sandbox Code Playgroud)

java java-8

3
推荐指数
1
解决办法
9584
查看次数

使用空接口强制执行"通用"代码类型

抱歉模棱两可的标题.

我正在读这本书http://algs4.cs.princeton.edu/home/,我认为将Go中的例子作为一个学习练习来实现是好的,但本书使用Java作为其语言来描述代码. .

第一章的其中一章讨论了设置一些核心数据类型/容器样式类以便以后重用,但我在尝试将这些数据转换为Go设置时遇到了麻烦,主要是因为这些数据类型似乎正在享受Java泛型的使用.

例如,我编写了以下代码

package bag

type T interface{}
type Bag []T

func (a *Bag) Add(t T) {
    *a = append(*a, t)
}

func (a *Bag) IsEmpty() bool {
    return len(*a) == 0
}

func (a *Bag) Size() int {
    return len(*a)
}
Run Code Online (Sandbox Code Playgroud)

这在原则上起作用,我可以添加项目Bag并检查其大小和一切.但是,这也意味着以下代码是合法的

a := make(bag.Bag,0,0)
a.Add(1)
a.Add("Hello world!")
a.Add(5.6)
a.Add(time.Now())
Run Code Online (Sandbox Code Playgroud)

我只是想知道是否有任何强制类型的方式,所以它符合类似的合同

Bag<T> bagOfMyType = new Bag<T>()
Run Code Online (Sandbox Code Playgroud)

例如

Bag<Integer> bagOfInts = new Bag<Integer>()
Run Code Online (Sandbox Code Playgroud)

我知道Go没有泛型,他们不是真正的The Go Way,但我只是想知道是否有可能在编译时"执行"任何东西(可能不是)

对不起,很长的帖子

编辑:好的所以我一直在深入研究这个问题,我几乎放弃了仿制药的一面(我明白这不是Go的路线图)所以我想做类似于带接口的Haskell类型类,例如

type T interface{}
type Bag …
Run Code Online (Sandbox Code Playgroud)

go

2
推荐指数
1
解决办法
1953
查看次数

Scala关于"Scala编程"一书中的例子的问题

我一直在读这本免费的在线书籍,我在下面的部分撞到了一堵砖墙: -

http://programming-scala.labs.oreilly.com/ch01.html#ATasteOfConcurrency

最后它告诉您运行以下命令

scalac shapes.scala shapes-actor.scala
scala -cp . shapes-actor-script.scala
Run Code Online (Sandbox Code Playgroud)

除非我运行最后一个命令,否则我会收到此错误

shapes-actor-script.scala:3: error: not found: value shapes
import shapes._
Run Code Online (Sandbox Code Playgroud)

起初我只是键入了代码,但是后来我发现我可能已经输入了一个拼写错误,我下载了代码示例,它在那里做了同样的事情.

我在Java 1.6上运行最新版本的Scala

任何回复将不胜感激.

scala

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

从exec.Command调用"sed"

我目前遇到麻烦试图运行该代码应该调用UNIX命令sed来查找和替换字符串hellogoodbye文件中./myfile.txt

如果你从命令行运行它,这可以正常工作,但如果我从我的Go代码尝试相同的事情....

command := exec.Command("sed", "-e \"s/hello/goodbye/g\" ./myfile.txt")
result,err := command.CombinedOutput()
fmt.Println(string(result))
Run Code Online (Sandbox Code Playgroud)

我只是继续得到这个输出

sed: -e expression #1, char 2: unknown command: `"'
Run Code Online (Sandbox Code Playgroud)

是否有某种引用转义或某些事情导致它解释字符串错误?

任何帮助,将不胜感激

go

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