我正在学习monad,这是我的第一个工作(除了琐碎的monad).随意批评其中的一切无情.我对"更惯用"和"更优雅"的回应特别感兴趣.
该monad计算执行的绑定数.
data C a = C {value :: a, count :: Int} deriving (Show)
instance Monad C where
(>>=) (C x c) f = C (value $ f x) (c + 1)
return x = C x 0
add :: (Num a) => a -> a -> C a
add x y = return $ x + y
-- Simpler way to do this? foldM is obviously something different.
mysum [x] = return x
mysum (x:xs) = mysum xs …Run Code Online (Sandbox Code Playgroud) 注释(在PHPDoc中)通过实现的函数的正确方法是什么__callStatic?更重要的是:有没有办法让NetBeans 和 PHPStorm理解这些是静态方法?
如果你想要更大的图片,这就是我对这个问题的看法.
问题:在我目前的项目中,我们有很多类应该是单例(DB代理等).不用说,我们至少有几百require_once并$foo = new FooProxy();线.
解决方案:我创建了一个Loader类来解决这个问题,使用__callStatic魔术方法,所以我们可以说$foo = Loader::FooProxy();.它非常适合我们的目的,但是:
问题:这种方式在团队中使用的IDE中显然没有类型提示.
解决方案:每个模块定义一个子类Loader,添加仅路由到的方法__callStatic.
问题:为了自动完成而添加实际解释的代码是不可接受的(这可以争论,但让我们暂时接受它).
解决方案:我们不添加任何实际方法,只需在PHPDoc中声明方法如下:
<?php
/**
* @method FooProxy FooProxy()
*/
class BarLoader extends Loader {}
?>
Run Code Online (Sandbox Code Playgroud)
问题:FooProxy不是静态方法.以下所有内容都不会使其成为静态:
<?php
/**
* @static
* @method FooProxy FooProxy()
*/
///////////////
/**
* @static @method A A()
* @method static A A()
* @method A …Run Code Online (Sandbox Code Playgroud) PyCharm为Django测试目标提供了"Run with Coverage"操作.这将运行测试,但显示零测试覆盖率(0%文件,项目窗格中未涵盖,编辑器中全部为红色).选中或取消选中"使用捆绑的coverage.py"没有任何区别.
从CLI运行相同的测试会得到预期的结果:
$ coverage --version
Coverage.py, version 3.5.1. http://nedbatchelder.com/code/coverage
$ coverage run ./manage.py test blackbox
Creating test database for alias 'default'...
....
----------------------------------------------------------------------
Ran 4 tests in 0.002s
OK
Destroying test database for alias 'default'...
$ coverage report
Name Stmts Miss Cover
---------------------------------------------
__init__ 0 0 100%
blackbox/__init__ 0 0 100%
blackbox/models 5 0 100%
blackbox/rules/__init__ 1 0 100%
blackbox/rules/board 62 19 69%
blackbox/tests 49 6 88%
manage 11 4 64%
settings 24 0 100%
---------------------------------------------
TOTAL 152 …Run Code Online (Sandbox Code Playgroud) 根据http://www.yesodweb.com/blog/2010/07/database-migrations,DeleteCascade几年前添加了一个类型类.我只能假设这是为了添加到模型中.设置我的模型配置后像这样:
Field
...
foreignId ForeignId DeleteCascade
Run Code Online (Sandbox Code Playgroud)
我的申请编译得很好.但是数据库模式没有改变,删除也不是由应用程序级联的.我应该(颤抖)手动做吗?有没有更好的办法?
我正在使用Yesod脚手架(Application.hs,Foundation.hs,Settings.hs,...)
使用GitHub API(v3)我想弄清楚提交出现在哪些分支上.我没有找到通过repo提交或提交数据对象直接查询它的方法.另一种解决方案是列出所有分支,并与其HEAD进行比较; 我想如果提交不在给定分支上,则比较将失败.
是否通过当前的API支持,我只是错过了它?如果没有,你有(更好的)解决方法吗?
我有一个小的Yesod应用程序(使用脚手架).我想为所有请求添加基本的HTTP身份验证.这是我到目前为止所尝试的:
isAuthorized 会很棒,但我看不到有办法阅读那里的标题. 这已经完成了吗?我该怎么做呢?