我怎样才能读取所有一中BufferedReader的线,并存储为一个字符串?
val br = new BufferedReader(...)
val str: String = getAllLines(br) // getAllLines() -- is where I need help
Run Code Online (Sandbox Code Playgroud)
与此问题类似.
鉴于Maybe Int,我试着mappend自己.
$let x = Just 55 :: Maybe Int
$mappend x x
<interactive>:126:1:
No instance for (Monoid Int) arising from a use of `mappend'
In the expression: mappend x x
In an equation for `it': it = mappend x x
Run Code Online (Sandbox Code Playgroud)
看着Maybe,我看到:
Monoid a => Monoid(也许是a)
由于Int没有实现Monoid类型类,这就解释了为什么我不能使用mappend它Maybe Int.
但是,我记得LYAH我可以使用Sum:
ghci> let x = Sum 55
ghci> mappend x x
Sum {getSum = …Run Code Online (Sandbox Code Playgroud) OWASP说:
"诸如strcpy(),strcat(),sprintf()和vsprintf()之类的C库函数对空终止字符串进行操作,并且不执行边界检查."
sprintf将格式化数据写入字符串int sprintf(char*str,const char*format,...);
例:
sprintf(str, "%s", message); // assume declaration and
// initialization of variables
Run Code Online (Sandbox Code Playgroud)
如果我理解OWASP的评论,那么使用sprintf的危险就是那样
1)如果消息的长度> str的长度,则存在缓冲区溢出
和
2)如果消息没有以null结尾\0,则消息可能被复制到超出消息内存地址的str,导致缓冲区溢出
请确认/否认.谢谢
让我们说我有一个特点,父母,有一个孩子,孩子.
scala> sealed trait Parent
defined trait Parent
scala> case object Boy extends Parent
defined module Boy
Run Code Online (Sandbox Code Playgroud)
我写了一个函数,模式匹配密封的特征.我的f功能是完全的,因为只有一个Parent实例.
scala> def f(p: Parent): Boolean = p match {
| case Boy => true
| }
f: (p: Parent)Boolean
Run Code Online (Sandbox Code Playgroud)
然后,2个月后,我决定添加一个Girl孩子Parent.
scala> case object Girl extends Parent
defined module Girl
Run Code Online (Sandbox Code Playgroud)
然后重新编写f方法,因为我们正在使用REPL.
scala> def f(p: Parent): Boolean = p match {
| case Boy => true
| }
<console>:10: warning: match may …Run Code Online (Sandbox Code Playgroud) 除了使用之外match,是否有类似于选项的方式来getOrElse实现Right或者Left值的实际内容?
scala> val x: Either[String,Int] = Right(5)
scala> val a: String = x match {
case Right(x) => x.toString
case Left(x) => "left"
}
a: String = 5
Run Code Online (Sandbox Code Playgroud) 我遇到过andThen,但没有正确理解它.
为了进一步研究,我阅读了Function1.andThen 文档.
def andThen[A](g: (R) ? A): (T1) ? A
Run Code Online (Sandbox Code Playgroud)
mm是一个MultiMap实例.
scala> mm
res29: scala.collection.mutable.HashMap[Int,scala.collection.mutable.Set[String]] with scala.collection.mutable.MultiMap[Int,String] =
Map(2 -> Set(b) , 1 -> Set(c, a))
scala> mm.keys.toList.sortWith(_ < _).map(mm.andThen(_.toList))
res26: List[List[String]] = List(List(c, a), List(b))
scala> mm.keys.toList.sortWith(_ < _).map(x => mm.apply(x).toList)
res27: List[List[String]] = List(List(c, a), List(b))
Run Code Online (Sandbox Code Playgroud)
注 - 来自行动中的DSL的代码
是andThen强大的?基于这个例子,看起来像mm.andThen去糖x => mm.apply(x).如果有更深刻的含义andThen,那么我还没有理解它.
在构建了一个示例mvn项目之后,我添加了我的org.restlet依赖项和Java代码.
然后,我成功构建了我的JAR mvn install.最后,我在尝试运行JAR时遇到了错误.
vagrant$ java -jar target/my-app-1.0-SNAPSHOT.jar
Failed to load Main-Class manifest attribute from
target/my-app-1.0-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud) 使用自定义Spring Security过滤器,如果HTTP标头不包含特定的键值对,我想返回HTTP 401错误代码.
例:
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
final String val = request.getHeader(FOO_TOKEN)
if(val == null || !val.equals("FOO")) {
// token is not valid, return an HTTP 401 error code
...
}
else {
// token is good, let it proceed
chain.doFilter(req, res);
}
Run Code Online (Sandbox Code Playgroud)
据我了解,我可以做以下事情:
(1)((HttpServletResponse) res).setStatus(401)并跳过剩余的过滤链
要么
(2)抛出异常,最终导致Spring Security向客户端抛出401错误.
如果#1是更好的选择,如何在调用setStatus(401)响应后跳过过滤器链?
或者,如果#2是正确的方法,我应该抛出哪个例外?
以前,Nicolas Rinaudo回答了我关于Scala 列表的问题foldRight总是使用foldLeft?
目前正在研究Haskell,我的理解是,在(prepend)可以使用(append)的情况下foldRight应该优先考虑.foldLeft::++
据我所知,原因是性能 - 前者发生在O(1),即在前面添加一个项目 - 恒定时间.而后者需要O(N),即遍历整个列表并添加项目.
在Scala中,因为foldLeft是在以下方面实现的foldRight,不使用的好处:+在++与foldRight连问题,因为foldRight被逆转,然后foldLeft'd?
例如,考虑这个简单的fold..操作,只需按顺序返回列表的元素.
foldLeft折叠每个元素,将每个项目添加到列表中:+.
scala> List("foo", "bar").foldLeft(List[String]()) {
(acc, elem) => acc :+ elem }
res9: List[String] = List(foo, bar)
Run Code Online (Sandbox Code Playgroud)
foldRight::在每个项目上使用运算符执行foldLeft ,然后反转.
scala> List("foo", "bar").foldRight(List[String]()) {
(elem, acc) => elem :: acc }
res10: List[String] = List(foo, bar)
Run Code Online (Sandbox Code Playgroud)
实际上,在Scala中哪个foldLeft …
给出一个简单的代数数据类型Parent:
scala> sealed trait Parent
defined trait Parent
scala> case object Boy extends Parent
defined object Boy
scala> case object Girl extends Parent
defined object Girl
Run Code Online (Sandbox Code Playgroud)
我定义了一个特征:
scala> trait HasGirl {
| val x: Girl.type
| }
defined trait HasGirl
Run Code Online (Sandbox Code Playgroud)
然后,我创建了一个实现的case类HasGirl,但提供了一个x值Boy.type.
scala> case class Thing(x: Boy.type) extends HasGirl
defined class Thing
Run Code Online (Sandbox Code Playgroud)
我曾预料到编译时错误,因为我没有看到x类型是如何Boy.type符合的val x: Girl.type.
这里发生了什么?