另一个Perl-beginner问题,但奇怪的是,我找不到教程来解释这个简单的问题.
作为练习,我希望编写一个函数map,它接受一个函数和一个数组,返回一个数组.在函数式语言中,经常使用它,我听说了子引用以及如何使用它们.
sub map {
my $f = shift;
my @r = ();
foreach (@_) {
push(@r, &f($_));
}
return @r;
}
sub square {
my $r = shift;
return $r*$r;
}
print map(\&shift, 1, 2, 3, 4, 5);
Run Code Online (Sandbox Code Playgroud)
但是,出于某种原因,我只得到这个词CODE和一个十六进制数作为输出,五次.然后,我已经改变了呼叫f中map,以$$f($_)和$f->($_)而这一切有同样的结果.
我在这做错了什么?
我需要一些帮助来设计一个monadic数据类型,我似乎无法绕过这个想法,但我肯定知道我想要什么.只有类型检查器似乎需要一些说服力.
我想要的是一些Primitive可以是monad的数据类型.它的功能基本上是绘制图元,我希望能够将它们和组合组合成基元,就像Parser库中的类型一样parsec.但实际绘图必须用IOmonad 完成.
顺便说一句,我也有这样一个类Drawable a:
class Drawable a where
draw :: (MonadIO m) => Pos -> a -> m ()
Run Code Online (Sandbox Code Playgroud)
我希望每个原始人都可以绘制.感谢任何意见.
简单问题:自从我切换到Idea 10.5后,它启用了此自动导入功能.对于Java开发人员来说,这肯定很好,但每次我输入类似的东西var x: Float都会自动添加import java.lang.Float到文件的开头.很多时候,它甚至会添加我甚至不想要的导入,来自我的jar丛林深处的未知包,并且更喜欢Java而不是Scala包.
使用代码完成选项卡中的开关,但它继续这样做.我怎么能摆脱这个?
在我的应用程序中,我可以使用不同类型的帖子.所以我有想法为此包含单表继承:
class Post < ActiveRecord::Base
has_many :comments
end
class TextPostValidator < ActiveModel::Validator
def validate(record)
if record.title.nil? and record.body.nil?
record.errors[:base] << "Either title or body is necessary"
end
end
end
class TextPost < Post
validates_with TextPostValidator
end
class ImagePost < Post
validates :image_url, :presence => true
end
class VideoPost < Post
validates :video_code, :presence => true
validates :video_service, :presence => true
end
class LinkPost < Post
validates :link_url, :presence => true
end
Run Code Online (Sandbox Code Playgroud)
当我现在这样做PostsController:
def new_text
@post = …Run Code Online (Sandbox Code Playgroud) 我有一个问题,我认为是微不足道的.我必须处理德语字母表中的变形金刚(äöü).在Unicode中,似乎有几种方法可以显示它们,其中一种方法是组合字符.我需要规范化这些不同的方式,用一个字符的代码替换它们.
很容易找到这样一个离经叛道的变音符号:它是一个字母aou,后面是UTF-8字符\uCC88.所以我认为正则表达式就足够了.
这是我的转换功能,使用Encoding包.
# This sub can be extended to include more conversions
sub convert {
local $_;
$_ = shift;
$_ = encode( "utf-8", $_ );
s/u\xcc\x88/ü/g;
s/a\xcc\x88/ä/g;
s/o\xcc\x88/ö/g;
s/U\xcc\x88/Ü/g;
s/A\xcc\x88/Ä/g;
s/O\xcc\x88/Ö/g;
return $_;
}
Run Code Online (Sandbox Code Playgroud)
但是由此产生的印刷变音符号是一些更狡猾的字符(现在占用4个字节),而不是此列表中的那个.
我想问题是这个与Perl的内部格式,实际的UTF-8和这种编码格式相关.
甚至将替换线更改为
s/u\xcc\x88/\xc3\xbc/g;
s/a\xcc\x88/\xc3\xa4/g;
s/o\xcc\x88/\xc3\xb6/g;
s/U\xcc\x88/\xc3\x9c/g;
s/A\xcc\x88/\xc3\x84/g;
s/O\xcc\x88/\xc3\x96/g;
Run Code Online (Sandbox Code Playgroud)
没有帮助,他们正确转换,但后面跟着字母"\ xC2\xA4".
有帮助吗?
我想为Jade的一个子集编写一个简单的解析器,生成一些XmlHtml以供进一步处理.
解析器非常简单,但与Parsec一样,有点长.由于我不知道我是否被允许发布这么长的代码,我在这里有完整的工作示例.
我以前曾经和Parsec打过仗,但很少成功.现在,我不太明白为什么它似乎吞下了几行.例如,玉的输入
.foo.bar
| Foo
| Bar
| Baz
Run Code Online (Sandbox Code Playgroud)
测试过parseTest tag txt,返回此:
Element {elementTag = "div", elementAttrs = [("class","foo bar")], elementChildren = [TextNode "Foo"]}
Run Code Online (Sandbox Code Playgroud)
我的解析器似乎能够处理任何类型的嵌套,但永远不会超过一行.我错过了什么?
我一直试图自己解决这个问题,但没有机会.
我需要的是RecyclerView(水平滚动)总是显示3项.每当用户左右摇晃或滚动时,如果还有更多,它应该会捕捉到接下来的3个项目.如果有的话,我只是在寻找最简单的解决方案.
我找到了包含单个项目的Gallery解决方案,但我需要3个项目.我知道它一定是可能的,但我无法弄清楚如何.例如,LayoutManager应该计算项目宽度以使其与设备的宽度相匹配.而且我想我需要以RecyclerView.OnScrollListener某种方式使用.
有人可以帮帮我吗?
我不知道怎么回答.我想我需要一般指导.我有这样的事情:
expr = buildExpressionParser table term
<?> "expression"
term = choice [
(float >>= return . EDouble)
, try (natural >>= return . EInteger)
, try (stringLiteral >>= return . EString)
, try (reserved "true" >> return (EBool True))
, try (reserved "false" >> return (EBool False))
, try assign
, try ifelse
, try lambda
, try array
, try eseq
, parens expr
]
<?> "simple expression"
Run Code Online (Sandbox Code Playgroud)
但是,当我测试该解析器时,我主要遇到问题...就像我尝试解析时一样
(a,b) -> "b"
Run Code Online (Sandbox Code Playgroud)
它被lambda解析器接受,但expr解析器讨厌它.有时它甚至完全挂在永恒的规则中.
我已经阅读了自己写一个方案 …
我有我的应用程序通常的中间件堆栈:
app.configure(function() {
app.use(express.static(PUBLIC_DIR));
app.use(express.favicon());
app.use(express.bodyParser({
keepExtensions: true,
uploadDir: '/tmp/neighr'
}));
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session({
secret: '***REDACTED***',
store: sessionStore,
}));
app.use(express.csrf());
app.use((require('connect-flash'))());
app.use(passport.initialize());
app.use(passport.session());
app.use(function(req, res, next) {
app.locals({
_csrf: req.session._csrf,
url: req.url,
user: req.user,
authenticated: req.isAuthenticated(),
messages: {
info: req.flash('info'),
error: req.flash('error'),
success: req.flash('success')
}
});
next();
});
app.use(app.router);
app.use(express.logger());
app.use(express.errorHandler());
});
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它express.static是堆栈中的第一个,因此静态资源将在不经过整个会话的情况下提供,这只会使加载时间更长.
但是,我确实有一些动态数据,我希望在没有所有会话内容的情况下提供服务:
app.get('/avatar/:id', function(req, res) {
var fid = res.params.id;
/* load binary from database */
res.send(data);
});
Run Code Online (Sandbox Code Playgroud)
此路由位于app.router堆栈末尾.我想保留声明这个和其他路由的方法,但是如何在会话中间件之前使用express来解析这些?
未来可能会有更多这样的动态路线,参数更多.
我正在使用Scala Liftweb并拥有此模型对象:
object Product extends Product with LongKeyedMetaMapper[Product] {
override def dbTableName = "products"
override def dbIndexes = UniqueIndex(slug) :: super.dbIndexes
def menus = sitemap
lazy val sitemap: List[Menu] = List(editProductMenuLoc, listProductsMenuLoc, createProductMenuLoc, indexProductsMenuLoc).flatten(a => a)
protected def editProductMenuLoc =
Full(Menu(Loc("EditProduct" + menuNameSuffix, editPath, S.?("edit.product"))))
protected def listProductsMenuLoc = Full(Menu(Loc("ListProduct" + menuNameSuffix, listPath, S.?("list.products"))))
protected def indexProductsMenuLoc = Full(Menu(Loc("ListProduct" + menuNameSuffix, indexPath, S.?("index.products"))))
protected def createProductMenuLoc =
Full(Menu(Loc("CreateProduct" + menuNameSuffix, createPath, S.?("create.product"))))
protected val menuNameSuffix = ""
protected val editSuffix …Run Code Online (Sandbox Code Playgroud)