除了纯函数的概念之外,我对函数式编程知之甚少.在约翰卡马克2013年的Quakecon演讲中,他提到了一个常常被问及与游戏相关的函数式编程的问题:如果你无法访问状态,你如何开枪并对另一个玩家造成伤害?(转述)在提到一个关于事件系统的事情,我不太明白,因为在我看来事件系统仍然需要状态?
如何用纯函数语言实现这一目标?
例如,我现在正在学习wxPython,特别是类的init函数:
__init__(self, parent, id=-1, label=EmptyString, pos=DefaultPosition,
size=DefaultSize, style=0, name=StaticTextNameStr)
Run Code Online (Sandbox Code Playgroud)
作为一个良好的编程习惯,我应该记住参数的顺序,还是只记住关键字并每次使用关键字调用函数?为了便于阅读,后者更好吗?
我有以下代码来检查游戏单元是玩家还是敌人.这是仅有的两个类别.我可以删除isEnemy方法并对敌人运行所有检查,就好像(!isPlayer),但我个人觉得如果(isEnemy)使代码的意图更清晰.是否有任何既定的编码风格可以说这种情况?
public boolean isPlayer(Unit unit) {
return unit == player;
}
public boolean isEnemy(Unit unit) {
for (Unit e : enemies) {
if (unit.equals(e))
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud) 比较int和long伤害表现?即
int x = 1;
long y = 2;
if (x < y) doStuff();
Run Code Online (Sandbox Code Playgroud)
而不是:
int x = 1;
int y = 2;
if (x < y) ...
Run Code Online (Sandbox Code Playgroud)
是否存在类型转换?或者内存中的位布局是否允许直接比较?(即long中的额外位可以假设为int的0)
我最初为定时函数创建了一个自定义函数,如下所示:
def timefunc(function, *args):
start = time.time()
data = function(*args)
end = time.time()
time_taken = end - start
print "Function: "+function.__name__
print "Time taken:",time_taken
return data
Run Code Online (Sandbox Code Playgroud)
现在,了解了timeit模块后,我想用它来实现相同的功能.在发送函数和*args参数时,我无法弄清楚如何做到这一点.我已经发现我必须在setup arg中执行此操作:
"from __main__ import function"
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何处理*args,因为'stmt'和'setup'参数都是字符串,我怎么能传递变量?
我可以在我的pygame游戏中找到昂贵的函数(例如,A*寻路)并将它们重写为此处概述的扩展吗?
这样做有速度好处吗?有更好的(python)解决方案吗?
我问这个问题是因为我刚开始学习C是出于无关的原因,当它发生在我身上时,当我回到Python和pygame时这可能是一个好主意.
我想输入" man time"和关于time.h时间函数的信息,但我得到的是linux时间系统命令.
man time 2或者man time 3没有任何不同.我怎样才能找到合适的手册页?
我无法理解如何在Java中初始化ArrayLists数组,有人可以解释这行代码中发生了什么吗?
edges = (ArrayList<Integer>[]) new ArrayList[nodeCount + 1];
Run Code Online (Sandbox Code Playgroud) java ×4
python ×4
c ×2
function ×2
a-star ×1
args ×1
cloud ×1
coding-style ×1
comparison ×1
fog ×1
haskell ×1
int ×1
linux ×1
long-integer ×1
manpage ×1
path-finding ×1
pygame ×1
ruby ×1
timeit ×1