我只是写了一小段代码,我想在IO Monad中使用guard功能.但是,没有MonadPlus for IO的定义,这意味着我们不能在IO 域中使用guard.我已经看到了使用MabyeT变换器在Maybe Monad中使用guard然后解除所有IO操作的示例,但如果我不需要,我真的不想这样做.
我想要的一些例子可能是:
handleFlags :: [Flag] -> IO ()
handleFlags flags = do
when (Help `elem` flags) (putStrLn "Usage: program_name options...")
guard (Help `elem` flags)
... do stuff ...
return ()
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种很好的方法可以通过MonadPlus声明或其他方式在IO Monad中获得一个保护功能(或类似的东西).或许我做错了; 有没有更好的方法在上面的函数中编写帮助消息?谢谢.
(PS我可以使用if-then-else语句,但它似乎以某种方式打败了这一点.更不用说对于很多选项,它将导致大量的嵌套.)
出于性能原因,这个问题涉及Java中的内存管理:因为我正在开发这个程序作为Android游戏而内存GC会破坏我的性能.所以到目前为止我已经做了大量的工作,事实证明我在优化游戏的内存使用方面做得很好,但我有一个问题:迭代器!
这是我在做的事情:
我的分配充满了这个:
466 24 java.util.AbstractList $ SimpleListIterator 12 java.util.AbstractList iterator
465 24 java.util.AbstractList $ SimpleListIterator 12 java.util.AbstractList iterator
464 24 java.util.AbstractList $ SimpleListIterator 12 java.util.AbstractList iterator
463 24 java.util.AbstractList $ SimpleListIterator 12 java.util.AbstractList iterator
461 24 java.util.AbstractList $ SimpleListIterator 12 java.util.AbstractList iterator
456 24 java.util.ArrayList $ ArrayListIterator 12 java.util.ArrayList iterator
454 24 java. util.ArrayList $ ArrayListIterator 12 java.util.ArrayList iterator
453 24 java.util.ArrayList $ ArrayListIterator 12 java.util.ArrayList iterator
452 24 java.util.ArrayList $ ArrayListIterator 12 java.util.ArrayList iterator
因此,在我的游戏运行时分配的唯一对象是迭代器!好吧,现在好了解决它...那是什么代码导致我问的问题......这里是: …
我有一个在我正在编写的代码中非常常见的问题,我希望有一个整数只能存在于范围为[start,end]的特定范围内.基本上我希望能够做类似以下的事情:
cyclic_int ci(4, 8);
ci = 4;
assert(ci == 4);
ci += 3;
assert(ci == 7);
ci += 2;
assert(ci == 5);
assert(ci == 13);
Run Code Online (Sandbox Code Playgroud)
这应该都归于真实.基本上,类自动为我应用模数(%),整数充当我初始化它的范围内的循环整数.我可以自己实现这个类,并重载所有常用运算符,使其与普通整数很好地工作,但它似乎是一个有用的类,以前有人可能已经做过.
所以我的问题是,是否有一个像这样的普通类,每个人都在使用或者我想以错误的方式做这个,并且有更好的简单方法.(我的目标是不必经常考虑应用%运算符或任何类似的函数)谢谢.
编辑:我决定写一个自己的,只是为了好玩:http://github.com/robertmassaioli/wrapping_number
正如这篇文章指出你可以使用正常安装Vimballs:
vim somevimball.vba
:so %
:q
Run Code Online (Sandbox Code Playgroud)
但是如果你想从命令行安装一个怎么做呢?我运行了一个'man vim',看起来最好的"源安装"选项是'-S'选项,所以我尝试用它安装haskellmode:
wget 'http://projects.haskell.org/haskellmode-vim/vimfiles/haskellmode-20090430.vba'
vim -S haskellmode-20090430.vba
Run Code Online (Sandbox Code Playgroud)
那没能奏效.它给了我以下错误:
处理函数vimball时检测到错误#Vimball:
第10行:(
Vimball)当前文件似乎不是Vimball!
按ENTER键或键入命令继续
应该注意的是,使用第一种方法我能够成功安装vimball.我已经在其他一些vimball上尝试了第二种方法,并且每次都失败了.有没有办法从命令行安装vimball?这似乎是一项有用的任务.
哦,我正在运行以下版本的vim:
Version: 2:7.2.330-1ubuntu3
Run Code Online (Sandbox Code Playgroud)
谢谢.
我有以下方法:
firstRightOrLefts :: [Either b a] -> Either [b] a
firstRightOrLefts eithers =
case partitionEithers eithers of
(_, (x : _)) -> Right x
(xs, _) -> Left xs
Run Code Online (Sandbox Code Playgroud)
困扰我的是丑陋的模式匹配,我想知道是否有更惯用的方法来编写这种方法.我的想法是,我有一堆可以返回Eithers的计算,我只想获得第一个结果或所有错误消息.也许我使用了错误的数据结构.也许Writer monad会更适合这项任务.我现在真的不确定.欢呼任何帮助!
所以我刚开始用Java编写游戏,我正在编写我的游戏对象.现在我已经在Evolve Your Hierarchy中读到,你应该将游戏构建为组合而不是大类层次结构.由于上一个链接中的图像显示:

但是,当实际开始实现时,我有一个关于在哪里应用接口的小问题.
假设你有一个叫做Player的类,接口是Moveable和Renderable.您是使用公共接口变量实现的:
class Player {
public Moveable moveable;
public Renderable renderable;
}
class GenericMoveable implements Moveable {
// Function implementations
}
class PlayerRenderable implements Renderable {
// Function implementations
}
Run Code Online (Sandbox Code Playgroud)
或者您尝试通过将接口直接应用于对象来执行此操作:
class Player implements Moveable, Renderable {
private GenericMoveable genericMoveable;
// Non-direct Implementation of Moveable
void someMoveFunc(double x, double y) {
genericMoveable.someMoveFunc(x, y);
}
// Direct implementation of Renderable
void someRenderableFunction() {
// Player class specific code
}
}
class GenericMoveable implements Moveable {
// …Run Code Online (Sandbox Code Playgroud) 我想配置我的计算机,以便说每半小时它会自动提交我正在处理的程序.我正在使用一个svn存储库,所以即使它只是一个每隔30分钟运行'svn ci'的脚本就可以了.问题是我不知道该怎么做.
有人可以告诉我,或者告诉我什么,这会让我得到这个定期提交的东西吗?
提前致谢.
编辑:对不起,似乎我让人们感到困惑,为什么我会这样做.我想这样做的唯一原因是因为我的讲师希望我们知道我们的代码如何随着时间的推移而发展,我认为使用svn是一个好主意.最新提交是否有效无关紧要.它只需要显示我随着时间的推移对代码所做的更改.
我有一个受版本控制的项目,但该项目有一些图像,视频和zip文件经常变化.我不想将这些文件存储在版本控制之下,因为它们会占用大量空间并使更新和提交速度非常慢.
处理此问题的好方法是什么,仍然提交已更改的非源文件?有没有更好的办法?
我目前正在使用subversion,如果有另一个版本控制客户端更好地处理这个问题,请推荐它!
我只是想知道我对使用共享库动态加载插件的跨平台实现的选择.到目前为止,我发现的唯一一个是:
而我只是想知道我是否有其他选择?本质上,我希望能够将插件放在共享对象文件中,并在运行时加载它们,我希望以跨平台的C++方式实现.
好?我已经尝试将模拟器的RAM大小增加到1024 MB,并且速度几乎没有改进,但是,它仍然无法使用.它有龟的速度.
有没有人有更好的想法让它更快?有什么东西我没做错吗?
android ×2
c++ ×2
haskell ×2
java ×2
autocommit ×1
class ×1
command-line ×1
composition ×1
either ×1
game-engine ×1
guard ×1
installation ×1
integer ×1
interface ×1
io ×1
modulus ×1
monads ×1
performance ×1
plugins ×1
svn ×1
vim ×1