我搜索了半个小时,仍然无法弄明白.
在SIP:模块化语言功能中,有许多功能需要在Scala 2.10(import language.feature
)中明确"启用" .其中有postfixOps
,我无法在任何地方找到参考.这个功能究竟允许什么?
有没有办法(ab)使用C预处理器来模拟C中的命名空间?
我正在考虑以下几点:
#define NAMESPACE name_of_ns
some_function() {
some_other_function();
}
Run Code Online (Sandbox Code Playgroud)
这将被翻译为:
name_of_ns_some_function() {
name_of_ns_some_other_function();
}
Run Code Online (Sandbox Code Playgroud) 我一直认为这Predef.println
只是一个捷径System.out.println
,但显然我错了,因为它似乎根本没用System.out
.为什么会这样?我怎样才能System.out
在Scala中进行下面的"重定向" ?
scala> val baos = new java.io.ByteArrayOutputStream
baos: java.io.ByteArrayOutputStream =
scala> val ps = new java.io.PrintStream(baos)
ps: java.io.PrintStream = java.io.PrintStream@6c5ac4
scala> System.setOut(ps)
scala> println("hello")
hello
scala> new String(baos.toByteArray)
res2: java.lang.String = ""
scala> System.out.println("hello")
scala> new String(baos.toByteArray)
res7: java.lang.String =
"hello
"
Run Code Online (Sandbox Code Playgroud) 作为Haskell的一个练习,我正在尝试实现heapsort.堆通常在命令式语言中实现为数组,但在纯函数式语言中这将是非常低效的.所以我看了二进制堆,但到目前为止我发现的所有内容都是从命令性的角度描述的,所提出的算法很难转化为功能设置.如何在Haskell等纯函数式语言中有效地实现堆?
编辑:通过有效我的意思是它应该仍然在O(n*log n),但它不必击败C程序.另外,我想使用纯函数式编程.在Haskell中做这件事还有什么意义呢?
haskell functional-programming binary-heap heapsort purely-functional
我试图在Eclipse中生成Java文档.源文件是UTF-8编码的,包含一些变音符号.生成的HTML文件不指定编码,也不使用HTML实体,因此在任何浏览器中都无法正确显示变音符号.
我该怎么做才能改变这个?
请原谅这个有趣的标题,我正在使用它与" 拉链炸弹 " 类比.是否可以创建一个scala源文件,在编译时会产生大量的类文件(或非常大的单个类文件)?有没有什么方法可以使类文件的大小比源文件的大小线性增长更快?
我有一些代码嵌套调用flatMap,如下所示:
foo.flatMap(implicit f => bar(123).flatMap(b =>
/* and so on... implicit f is still in scope here.*/
))
Run Code Online (Sandbox Code Playgroud)
通常,人们会将其写为理解,这使得代码更具可读性:
for {
f <- foo
b <- bar(123)
/* yet more method calls that need f as an implicit parameter*/
}
Run Code Online (Sandbox Code Playgroud)
但我需要f
暗示,我不认为有办法用于理解.在那儿?当然我可以明确地传递f,但这意味着再见DSL.我对Scala 2.9和2.10的答案感兴趣.
为了清楚起见,我想做这样的事情,但它不会编译:
for {
implicit f <- foo
b <- bar(123) //bar takes implicit argument
/* yet more method calls that need f as an implicit parameter*/
}
Run Code Online (Sandbox Code Playgroud)
编辑:也许一个功能请求是一个好主意?
EDIT2:这应该适用于所有可以用于理解的类型,因此不仅仅是通常的集合类型,如List
或Seq
,还有Future …
我想知道Scala的llvm-backend当前有多成熟,以及它是否用于我可以查看的任何开源项目中.
我在Scala中编写一个宏,但是当我调用它时,我收到一条错误消息"Double不接受参数".显然,宏构建AST的方式有问题.那我怎么能看到扩展的宏呢?有没有办法在运行时调用宏实现?
是否可以使用类似于Scala中where-clauses的内容?也许有一些我没想到的伎俩?
编辑:
感谢您的所有答案,我们非常感谢.总结一下:局部变量,vals和defs可以用来实现几乎相同的东西.对于惰性求值,可以使用lazy val(带隐式缓存)或函数定义.确保功能纯度留给程序员.
现在只剩下一个问题:是否有一种方法可以在使用它们的表达式之后放置值或函数定义?有时这似乎更清晰.这可以使用类或对象的字段/方法,但它似乎不适用于方法.
到目前为止,答案中没有提到另一件事.where-clause也限制了它们中定义的表达式的范围.我还没有找到在Scala中实现这一目标的方法.
scala ×7
scala-2.10 ×3
haskell ×2
binary-heap ×1
c ×1
c++ ×1
class ×1
diacritics ×1
encoding ×1
heapsort ×1
html ×1
implicit ×1
javadoc ×1
llvm ×1
macros ×1
maturity ×1
namespaces ×1
open-source ×1
println ×1
scala-2.9 ×1
where-clause ×1