我最近听到了很多关于Scala和Lift Web框架的好东西,尤其是来自Foursquare的人,因此我可能会在我的下一个项目中使用这项技术.
这值得么?在Scala/Lift平台上分享您的经验.
我今天在黑客新闻中看到这篇文章.我正在努力解决理解纯函数式编程如何帮助我抽象现实世界问题的相同问题.7年前,我从命令式转向OO编程.我觉得我已经掌握了它,它对我很有帮助.在过去的几年里,我在函数式编程中学到了一些技巧和概念,比如map和reduce,我也喜欢它们.我已经在我的OO代码中使用它们,并且对此感到满意,但是当抽象出一组指令时,我只能想到OO抽象来使代码更漂亮.
最近我一直在研究python中的一个问题,我一直在努力避免使用OO来解决它.在大多数情况下,我的解决方案看起来势在必行,我知道如果我使用OO,我可以让它看起来很干净.我想我会发布问题,也许功能专家可以提出一个美观和功能性的解决方案.如果必须,我可以发布我丑陋的代码,但不愿意.:)这是问题所在:
用户可以请求图像或图像的缩略图.如果用户请求图像的缩略图,但它尚不存在,请使用python的PIL模块创建它.还使用人类可读路径创建指向原始或缩略图的符号链接,因为原始图像名称是哈希码,而不是描述其内容.最后,重定向到该图像的符号链接.
在OO中,我可能会创建一个SymlinkImage基类,一个ThumbnailSymlinkImage子类和一个OriginalSymlinkImage子类.共享数据(在SymlinkImage类中)将是原始路径之类的东西.共享行为将创建符号链接.子类将实现一个名为'generate'的方法,该方法将负责创建缩略图(如果适用),并调用其超类来创建新的符号链接.
回读一些我的Scala代码,我注意到它是功能性或面向对象的.
实际上,我不知道如何调解不可变类型和纯函数所暗示的无副作用规则以及OO的前提,其中方法就地修改实例状态,这显然是副作用.
我正在研究的一个解决方案是使所有方法返回具有适当状态修改的当前实例的克隆.看起来很渴望,但在我决定对代码进行并列化时可能有所帮助,对吧?
混合这两种范式的最佳做法是什么?什么是平衡?
谢谢.