在了解了LLVM如何工作之后,我对如何生成可移植的低级代码以及如何构建这个"东西"模块感到非常兴奋.
但我今天发现C--的存在似乎与LLVM共享一些概念.
所以我正在寻找一些信息,帮助我理解这两个项目之间的主要区别......以及为什么两者都存在.
对我来说,LLVM看起来有点像瑞士军刀用于编译器基础设施,而C--看起来远不如先进.
问候,
如何使Foo构造函数仅对此包(单元测试+伴随对象)可见?
我不希望能够在这2个文件之外实例化Foo ...
Foo.scala
package project.foo
class Foo(val value: String)
object Foo {
def generate: Foo = new Foo("test")
}
Run Code Online (Sandbox Code Playgroud)
FooSpec.scala
package project.foo
import org.spec2.mutable._
class FooSpec extends Specification {
"Foo" should {
"be constructed with a string" {
val foo = new Foo("test")
foo.value must be "test"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Scala 2.9
问候,
这是一个具有挑衅性的问题,旨在公开讨论如何在开发者社区中看到抽象反转.我很想知道你的想法.
首先,这里引用维基百科给出的抽象反转例子:http: //en.wikipedia.org/wiki/Abstraction_inversion
在诸如Java和C++之类的面向对象语言中创建表示函数的对象是很麻烦的,其中函数不是第一类对象.在C++中,可以通过重载()运算符来使对象"可调用",但是仍然经常需要实现一个新类,例如STL中的Functors.
对我来说,函数是Scala中的一等公民,但是当我们使用Scala生成Java字节码时,Scala会在Java上创建特定的类'以使函数式编程成为可能...... 我们可以将其视为抽象反转吗?
同样可以应用于Clojure或JVM的任何功能语言......甚至是Apache Collections,例如:
http://commons.apache.org/collections/apidocs/org/apache/commons/collections/Closure.html
顺便说一句,我不相信维基百科文章的客观性.例如,当谈到微内核中可能的抽象反转时,文章说"一个观点主体认为微内核设计是一个抽象反转",但在OOP中没有这样的函数类型声明.
oop abstraction programming-languages functional-programming scala
我正在尝试使以下代码工作(好吧,首先编译!):
module Orexio.Radix where
import Data.Data
import Data.Map (Map)
import qualified Data.Map as Map
import Data.Typeable
import Text.JSON.Generic
class Resource a where
type Representation a :: *
identifier :: Resource a => Identifier a
class Endpoint a where
call :: Resource a => a -> Representation a
data Identifier a = Identifier [String] deriving (Show)
data Binding a = Binding (JSValue -> Either String JSValue)
bind :: (Data a, Resource a, Endpoint a, Data (Representation a)) => Binding a
bind …
Run Code Online (Sandbox Code Playgroud)