我认为学习新编程语言的最佳方法之一是深入研究源代码,看看有经验的编码员如何编写.我发现这里的问题在Stack Overflow上有其他语言,但没有针对Objective-C.我发现的最接近的问题是关于好看的Cocoa用户界面的这个问题,但我正在思考一般代码质量,例如好用的习语和设计模式,以及可用的文档.另一个好的特征是代码库足够大,需要真正的组织纪律,但足够小,初学者可以适应他/她的头脑.
您认为符合这些标准的高质量开源项目是什么?
我最近被要求计算一起去旅行的一群人所欠的钱,并且遇到了一个有趣的问题:假设你知道每个人欠另一个人的金额,那么巩固人与人之间债务的一般算法是什么?这样只需要支付最少的款项?以此为例:
我们可以通过重新制定这样的债务来取消迈克和约翰之间的付款:
我手工完成了数学计算,因为它很容易,但是后来我的程序员很想找到一个通用的算法来为一个任意大的组做这个.这对我来说似乎是一个图算法,所以我将其重新表示为图:
你有没有尝试过只使用Swing来改变课程,因为它根本无法做到你想要的?
我对Swing很新,仅仅在5年前用于学校项目,但似乎Swing在提供更原生的外观和感觉方面已经走了很长的路,所以我正在考虑用它来开发Mac OS X上的应用程序的GUI.但在此之前,我想看看是否有人遇到任何阻止他们使用Swing的showstopper问题.
在我的头顶,一些可能性:
我对Haskell monad变换器有点熟悉,但对Scalaz(版本7)不熟悉.我从以下Haskell代码中做了(我认为是)一个简单的翻译:
import Control.Monad.State
type Pass a = StateT String Maybe a
monadTest :: Pass String
monadTest = do
s <- get
return s
Run Code Online (Sandbox Code Playgroud)
这个Scala代码:
import scalaz._
import Scalaz._
object StateTest {
type Pass[A] = StateT[Option, String, A]
def monadTest: Pass[String] =
for {
s <- get[String]
} yield s
}
Run Code Online (Sandbox Code Playgroud)
Haskell代码编译.Scala无法编译,出现以下错误:
[error] .../StateTest.scala:9: type mismatch;
[error] found : scalaz.IndexedStateT[scalaz.Id.Id,String,String,String]
[error] required: StateTest.Pass[String]
[error] (which expands to) scalaz.IndexedStateT[Option,String,String,String]
[error] s <- get[String]
[error] ^
Run Code Online (Sandbox Code Playgroud)
首先,似乎scalaz实现StateT了IndexedStateT.好.但是,似乎get[String] …