小编use*_*165的帖子

R的功能工厂

我尝试通过返回一个专门的函数字典来提出一个函数工厂,或多或少像函数式编程风格.我尝试在以下代码中执行此操作.

require(hash)

names = c("aa","bb","cc");
funs = hash()
for (i in seq(length(names))) {
  n = names[i]
  funs[[n]] = function(x) { 
    print(paste(n,":",x, sep="")) 
 }
}
Run Code Online (Sandbox Code Playgroud)

显然,我在数组中有3个函数; 但是,它们的行为与迭代中的最后一个函数相同.

> funs[["aa"]](1)
[1] "cc:1"
> funs[["bb"]](2)
[1] "cc:2"
> funs[["cc"]](3)
[1] "cc:3"
Run Code Online (Sandbox Code Playgroud)

我的猜测是R没有创建新的函数实例,但在for循环中重用了相同的函数对象.

我试着以下希望R会创建不同的函数对象,

  funs[[n]] = eval(parse(text="function(x) { print(paste(n,':',x, sep='')) }"))
Run Code Online (Sandbox Code Playgroud)

但它的工作原理与第一个相同.

您是否知道如何创建一个创建不同功能对象的生成器?

functional-programming r

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

为什么scala.io.Source使用所有核心?

我注意到以下代码使用多个线程并在读取文件时保持所有CPU核心忙100%.

scala.io.Source.fromFile("huge_file.txt").toList
Run Code Online (Sandbox Code Playgroud)

我假设以下是相同的

scala.io.Source.fromFile("huge_file.txt").foreach
Run Code Online (Sandbox Code Playgroud)

我在我的开发机器(OS X 10.9.2)上将Eclipse代码作为单元测试中断,并显示这些线程:main,ReaderThread,3 Daemon System Thread. htop如果我在24核服务器机器(ubuntu 12)的scala控制台中运行它,则显示所有线程都忙.

问题:

  1. 如何使用N个线程限制此代码?
  2. 为了理解系统性能,你能解释一下在io.Source中做什么,为什么以及如何做到这一点?阅读来源并没有帮助.
  3. 我假设每一行都按顺序读取; 但是,由于它使用多个线程,所以foreach在多个线程中运行?我的调试器似乎告诉我代码仍然在主线程中运行.

任何见解将不胜感激.

io parallel-processing multithreading scala

5
推荐指数
1
解决办法
332
查看次数