小编kei*_*ter的帖子

什么是Scala等效于Java构建器模式?

在我每天用Java做的工作中,我使用构建器来进行流畅的接口,例如: new PizzaBuilder(Size.Large).onTopOf(Base.Cheesy).with(Ingredient.Ham).build();

使用快速而肮脏的Java方法,每个方法调用都会改变构建器实例并返回this.不可避免地,它涉及更多的打字,在修改之前首先克隆构建器.构建方法最终会对构建器状态进行繁重的处理.

什么是在Scala中实现相同的好方法?

如果我想确保onTopOf(base:Base)只调用一次,然后只调用with(ingredient:Ingredient)并且build():Pizza可以被称为a-la定向构建器,我将如何进行此操作?

java design-patterns scala

55
推荐指数
4
解决办法
2万
查看次数

IO Monad在什么意义上纯粹?

我已经将IO monad描述为状态monad,状态是"现实世界".这种IO方法的支持者认为,这使IO操作变得纯粹,就像在引用透明时一样.这是为什么?从我的角度来看,IO monad中的代码似乎有很多可观察到的副作用.此外,是不是可以描述几乎任何非纯函数,如现实世界的功能?例如,我们不能想到,比方说,C的malloc是一个函数,它接受一个RealWorld和一个Int并返回一个指针和一个RealWorld,就像在Realmonorld隐含的IO monad中一样?

注意:我知道monad是什么以及它是如何使用的.请不要回复随机monad教程的链接,除非它专门解答我的问题.

io monads haskell

50
推荐指数
5
解决办法
7256
查看次数

为什么选择具有哈希而不是点的Scala类型成员?

在Scala中,从类中选择类型的语法与从类中选择其他任何类型的语法不同.前者使用散列作为选择运算符而不是点.这是为什么?

示例:如果我们有这样的类......

class Example {
    type Foo = String
}
Run Code Online (Sandbox Code Playgroud)

为什么我们从这个类中选择类型......

val example:Example#Foo = "1"
Run Code Online (Sandbox Code Playgroud)

而不是像这样?

val example:Example.Foo = "1"
Run Code Online (Sandbox Code Playgroud)

syntax type-systems scala

34
推荐指数
1
解决办法
3272
查看次数

为什么大多数S表达式语言都是动态输入的?

为什么大多数Lisps和Schemes都是动态输入的?静态类型是否与其某些常见功能混合在一起?

lisp scheme programming-languages s-expression

25
推荐指数
3
解决办法
1455
查看次数

为什么几乎所有的OO语言都编译为字节码?

在我所知道的面向对象语言中,除了C++和Objective-C之外,几乎所有语言都编译为在某种虚拟机上运行的字节码.为什么有这么多不同的语言在编译成字节码时,而不是机器码?在princible中是否可以使用高级内存管理的OOP语言编译为机器代码?

编辑:我知道多平台支持通常是这种方法的优势.但是,很有可能在多个平台上进行本机编译,而无需为每个平台创建新的编译器.每个例子都可以发出C代码然后用GCC编译.

compiler-construction oop programming-languages bytecode

17
推荐指数
2
解决办法
4887
查看次数

是否有满足这些要求的垃圾收集算法?

我正在为静态类型的面向对象语言编写编译器.目前我正在研究垃圾收集算法.我想知道是否有一个收藏家:

  • 开源和记录,以便我可以实现它.
  • Acurrate
  • 全局,即每个进程只有一个收集器,而不是每个线程一个收集器.
  • 增量和/或并发,以避免主要集合的长时间停顿.
  • 适合这种编程范例.在破坏性赋值存在的情况下,收集器变得非常慢的一个例子.

编辑:为了澄清,我想知道是否有一个可实现的算法可以做到这一点,而不是有一个现成的收集器.

compiler-construction algorithm garbage-collection

16
推荐指数
2
解决办法
665
查看次数

为什么Scala具有路径依赖类型?

我一直在研究路径依赖类型.我能找到的最好的描述是:

如果L是类型标签,则xL和yL是相同类型iff x和y可以显示为引用同一对象.

这有时不是人们所期望的子类型行为.我希望如果上面例子中的L确实相同,那么就足以使xL和yL变得一致.

Scala是这样设计的,有什么特别的原因吗?

scala path-dependent-type

14
推荐指数
1
解决办法
1411
查看次数

Mocking scala object

I am using mockito and trying to mock a scala object.

object Sample { }
//test
class SomeTest extends Specification with ScalaTest with Mockito {
    "mocking should succeed" in {
        val mockedSample = mock[Sample]
     }
}
Run Code Online (Sandbox Code Playgroud)

这给了我两个编译错误.

error: Not found type Sample
error: could not find implicit value for parameter m:
scala.reflect.ClassManifest[<error>]
Run Code Online (Sandbox Code Playgroud)

如果我将Sample从对象更改为类,则可以正常工作.有可能用mockito模拟scala对象吗?如果有,怎么样?

specs scala mocking object mockito

13
推荐指数
4
解决办法
2万
查看次数

如何用Java编译匿名类?

我听说Java字节码实际上不支持任何类型的未命名类.javac如何将未经修改的类转换为命名类?

java compiler-construction javac anonymous-class

12
推荐指数
1
解决办法
1641
查看次数

如何关闭Atom中的代码段?

我最近开始使用Atom.我遇到的一个问题是为Ruby定义了太多/不明确的片段.这会使标签更糟糕,因为您有时会获得一些不相关的代码而不是您想要的名称.我想知道如何关闭"语言Ruby"包中的特定片段,或者关闭所有片段的失败.最好不要完全禁用Ruby包.

configuration code-snippets atom-editor

7
推荐指数
1
解决办法
1408
查看次数

这个LLVM寄存器号有什么问题?

我正在为我正在学习的课程编写一个简单的类C语言的编译器.这段代码:

int main() {
    printInt(not(0));
    return 0;
}

int not(int n) {
    if (n == 0) {
        return 1;
    } else {
        int result = 0;
        return result;
    }
}
Run Code Online (Sandbox Code Playgroud)

..我天真地编译到这个bitcode:

declare void @printInt(i32)
declare void @printDouble(double)
declare void @printString(i8*)
declare i32 @readInt()
declare double @readDouble()

define i32 @main() {
entry:
    %0 = call i32 @not(i32 0)
    call void @printInt(i32 %0)
    ret i32 0
    unreachable
}

define i32 @not(i32 %n_0) {
entry:
    %0 = icmp eq i32 %n_0, 0
    br …
Run Code Online (Sandbox Code Playgroud)

code-generation llvm

6
推荐指数
1
解决办法
1233
查看次数

由于含糊不清的Prelude,无法建立阴谋套餐

我一直在尝试从cabal 安装BNF转换器,但是构建它时存在问题.显然,这个软件包使用了haskell98和基础版本4.*的混合模块.这提出了一个问题,如果您使用haskell98进行编译隐藏,则找不到某些模块.但是,如果你使用haskell98进行编译,那么ghc无法判断它是否应该使用新的Prelude或者haskell98 Prelude!

错误消息:

Main.hs:1:1:
    Ambiguous module name `Prelude':
    it was found in multiple packages: base haskell98-2.0.0.1 
Run Code Online (Sandbox Code Playgroud)

你如何解决这样的错误?

build-process haskell cabal

4
推荐指数
1
解决办法
2171
查看次数

为什么Hugs在我的数据类型声明中抱怨`|`?

我正在使用haskell编写一个小的lisp解释器.在此过程中,我定义了此数据类型,以获得较少类型的数字.

data Number = _Int Integer
            | _Rational Rational
            | _Float Double
    deriving(Eq,Show)
Run Code Online (Sandbox Code Playgroud)

用拥抱编译它失败,出现以下错误:

错误"types.hs":16 - 数据类型声明中的语法错误(意外的"|")

第16行是|上面代码中第一行的行.

haskell hugs

3
推荐指数
1
解决办法
387
查看次数