这个问题在设计代码中已经出现过几次,特别是库.似乎有一些兴趣,所以我认为它可能会成为一个很好的社区维基.
failMonad中的方法被一些人认为是疣; 这个课程有点武断,不是来自原始范畴理论.但当然在当前状态下,许多Monad类型都有逻辑和有用的fail实例.
MonadPlus类是Monad的一个子类,它提供了mzero一种在monad中逻辑地封装失败概念的方法.
因此,想要编写一些执行某种失败处理fail的monadic代码的库设计人员可以选择让他的代码使用Monad中的方法或将他的代码限制为MonadPlus类,这样他就可以感觉良好的使用mzero,即使他完全不关心幺半群组合mplus操作.
关于这个主题的一些讨论在这个维基页面中有关改进MonadPlus课程的建议.
所以我想我有一个具体的问题:
什么monad实例,如果有的话,有一个自然的fail方法,但不能是MonadPlus的实例,因为它们没有逻辑实现mplus?
但我最感兴趣的是关于这个问题的讨论.谢谢!
编辑:最后一个想法发生在我身上.我最近学到了(尽管它在文档中是正确的fail),monadic"do"符号以模式匹配失败的方式被贬低,就像(x:xs) <- return []调用monad一样fail.
似乎语言设计者必须受到一些自动故障处理的前景的强烈影响,这些故障处理内置于haskell的语法中,包含fail在Monad中.
我试图让这个布局没有javascript发生.
我有一个父div和一个子div,其中包含不断追加的内容.我希望孩子在父母内部对齐并垂直生长.我还希望父级div在子级的高度>父级的高度时滚动.

第一部分非常简单:
#child { position:absolute; bottom: 0 }
Run Code Online (Sandbox Code Playgroud)
第二部分很难,因为绝对定位的元素在内容流之外并且不会触发滚动.
父div跨越浏览器窗口的整个高度(我在设计时不知道)
我是JavaScript和jQuery的新手.我想展示一个组合框-A,它是一个<select>带有选定id内容的HTML ,另一个位于onChange()上.
如何通过选择传递完整的组合框id,以及如何在onChange事件触发时传递其他参数?
我正在运行列表理解数字列表作为字符串,所以例如列表看起来像这样
vals = ['0.13', '324', '0.23432']
Run Code Online (Sandbox Code Playgroud)
并尝试这样的列表理解:
best = [x for x in vals > 0.02]
Run Code Online (Sandbox Code Playgroud)
我得到一个TypeError:迭代非序列.
列表不是一个应该是您应该能够迭代的第一个序列吗?什么是序列?
我找到的基本问题很难找到答案.
谢谢.
我正试图为N64重拍Star Fox的游戏.当时我遇到了碰撞问题并让我的船像他们想象的那样拍摄.
我现在面临的最大挑战是让这个游戏的瞄准盒有所帮助.
对不起,我没有注意到我的一半问题被切断了.链接到源代码
现在我正试图让箱子碰撞起作用.另外,如何在Cylinder,Torus等原语上放置一个边界框.
如果你知道任何网站,那么.X文件也会有很好的帮助.
当我发现这个时,我正在研究jQuery源代码(v1.5第2295行):
namespace = new RegExp("(^|\\.)" +
jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么要slice(0)在这里使用?
我偶然发现了一些代码,它试图从满足特定条件的列表中删除对象.
有一个已经创建的对象列表,其中包含一些内容:
List<Foo> FooList = new List<Foo>()
FooList.Add(...)
FooList.Add(...)
Run Code Online (Sandbox Code Playgroud)
在其他一些函数中,他们然后去掉了一些对象:
List<Foo> RemovedFoo = new List<Foo>()
foreach (Foo f in FooList
if (f.Condition)
RemoveFoo.Add(f);
foreach (Foo f in RemovedFoo)
FooList.Remove(f);
RemovedFoo.Clear();
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法呢?我知道你不能简单地在第一个循环中执行删除,但肯定必须有一个更聪明的方法来执行此操作.
我希望在我的查询中防止不可搜索的表达式,这是检查空条件的更好方法吗?
AND c.Account IS NOT NULL
AND c.Account <> ''
Run Code Online (Sandbox Code Playgroud)
要么
AND ISNULL(c.Account,'') <> ''
Run Code Online (Sandbox Code Playgroud)
我突然意识到Account它来自一个LEFT JOIN所以它可能是空的.我想要他们只相交的情况,这意味着我真的应该用一个INNER JOIN吧?谢谢你的facepalms;)
然而,忽视了肉麻的自我实现,我还是想知道在一般情况下,我不能让这个问题的答案AccountNOT NULL列.
有什么方法可以告诉EF不要担心a DELETE或者UPDATE做或不做的行数?
我正在尝试从数据库中删除一行,但由于该行不存在,EF会抛出异常:DbUpdateConcurrencyException..说0行受到影响.这是对的 - >没有删除任何行.但那完全没问题......因为没有数据.
我真的不想对数据库进行往返查看该行是否存在..如果是这样的话...然后尝试删除它.
如果我尝试吞下一个try / catch块中的异常,那么当我尝试SaveChanges()...这是坏事时,要删除的其余项目不会被发送到数据库.
例如.
Delete(new Foo(1));
Delete(new Foo(2));
Delete(new Foo(3));
SaveChanges(); // <-- Throws the exception.
// DB Trace : DELETE FROM Foo WHERE Id = 1;
Run Code Online (Sandbox Code Playgroud)
并且那就是..没有迹象显示记录2或3试图被删除..因为异常停止一切:(
有任何想法吗?
Delete工作怎么样?这是代码......(简化和强类型)
public void Delete(Foo foo)
{
if (foo == null)
{
throw new ArgumentNullException("foo");
}
Foo attachedEntity = Context.Set<Foo>().Local.FirstOrDefault(x => x.Id > 0);
if (attachedEntity != null)
{
// Entity already in …Run Code Online (Sandbox Code Playgroud)