如何使用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) 我试图搞砸了最近出现在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
功能或类似的东西.我知道你可能会编写一个函数来完成它,但是这样就无法在一行中完成这项任务.
任何帮助,将不胜感激.
我正试图深入探讨使用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",引自:
Run Code Online (Sandbox Code Playgroud)__objc_classrefs__DATA@0 in ShowTest.o
ld:找不到符号
collect2:ld返回1退出状态
现在我假设这是一个链接错误.我尝试按照此处说明中的每一步操作: -
http://github.com/gabriel/gh-unit/blob/master/README.md
这些说明的第2步让我困惑: -
在Target'Test'信息窗口中,常规选项卡:
添加链接库,在Mac OS X 10.5 SDK部分下,选择GHUnit.framework
添加链接库,选择您的项目.
添加直接依赖项,然后选择您的项目.(这将导致您的应用程序或框架在测试目标之前构建.)
当我所有接受它的.dylib,.framework和.o文件时,我应该如何将我的项目添加到链接库列表?
我似乎在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中实现类似的东西?
任何帮助,将不胜感激.
对不起,如果这个问题没有任何意义.
我目前正在编写一个小应用程序,我希望将一些函数"链接"起来,形成更广泛的计算.
因此,例如,我有一个函数调用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表单的应用程序,当它们被评估时,结果将返回到列表中
所以例如输入就是
(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表单作为数据输入机制?
我目前正在学习本教程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中不起作用
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]
任何帮助,将不胜感激
我有一个与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) 抱歉模棱两可的标题.
我正在读这本书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) 我一直在读这本免费的在线书籍,我在下面的部分撞到了一堵砖墙: -
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
任何回复将不胜感激.
我目前遇到麻烦试图运行该代码应该调用UNIX命令sed
来查找和替换字符串hello
与goodbye
文件中./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 ×4
haskell ×3
clojure ×2
regex ×2
gh-unit ×1
haskell-warp ×1
java ×1
java-8 ×1
linker ×1
objective-c ×1
scala ×1
unit-testing ×1
xcode ×1