我试图在C++程序中节省一些内存,我想知道我是否可以使用块作为变量的范围(如Perl).假设我有一个巨大的对象执行一些计算并给出结果,这样做是否有意义:
InputType input;
ResultType result;
{
// Block of code
MyHugeObject mho;
result = mho.superHeavyProcessing();
}
/*
My other code ...
*/
Run Code Online (Sandbox Code Playgroud)
退出块时,我可以期望对象被销毁吗?
我希望这是直截了当的,我做错了.我在网上看到一些关于"变异自杀"看起来不错的东西,但它是旧版本而且我在5.10.1.
无论如何 - 我声明的变量 - $ RootDirectory - 只是突然失去了价值,我无法弄清楚原因.
这是一个重现问题的脚本.当我在调试模式(perl -d)中运行脚本时,我可以在第21行和第26行打印出$ RootDirectory.但它已经过了第30行.
use strict;
my $RootDirectory;
my @RootDirectories;
@RootDirectories = (
'c:\\P4\\EDW\\PRODEDW\\EDWDM\\main\\db\\'
,'c:\\P4\\EDW\\PRODEDW\\EDWADS\\main\\db\\'
,'c:\\P4\\EDW\\PRODEDW\\FJE\\main\\db\\'
);
foreach $RootDirectory (@RootDirectories) {
# $RootDirectory = 'c:\\P4\\EDW\\PRODEDW\\EDWDM\\main\\db\\';
# print ' In foreach ' . $RootDirectory. "\n";
RunSchema ();
}
exit(0);
sub RunSchema() {
# print ' In RunSchema ' . $RootDirectory. "\n";
CreateTables ();
}
sub CreateTables() {
# print ' In CreateTables ' . $RootDirectory. "\n";
SQLExecFolder ('tbl');
}
sub SQLExecFolder() {
print …Run Code Online (Sandbox Code Playgroud) 让我在R中添加另一个范围问题,这次是降雪包.如果我在我的全局环境中定义一个函数,并且我稍后在另一个函数中的sfApply()中尝试使用该函数,则不再找到我的第一个函数:
#Runnable code. Don't forget to stop the cluster with sfStop()
require(snowfall)
sfInit(parallel=TRUE,cpus=3)
func1 <- function(x){
y <- x+1
y
}
func2 <- function(x){
y <- sfApply(x,2,function(i) func1(i) )
y
}
y <- matrix(1:10,ncol=2)
func2(y)
sfStop()
Run Code Online (Sandbox Code Playgroud)
这给出了:
> func2(y)
Error in checkForRemoteErrors(val) :
2 nodes produced errors; first error: could not find function "func1"
Run Code Online (Sandbox Code Playgroud)
如果我将我的函数嵌套在另一个函数中,它可以工作.当我在全局环境中使用sfApply()时,它也可以工作.事实是,我不想在函数2中嵌入我的函数func1,因为这会导致func1被定义多次(func2用于循环结构).
我已经尝试过简化代码以摆脱双循环,但由于问题的性质,这是不可能的.有任何想法吗?
我对dot-dot-dot参数的范围有疑问.考虑以下函数`foo =
foo <- function(x, ...){
require(classInt);
intvl = classIntervals(x, ...);
return(intvl);
}
Run Code Online (Sandbox Code Playgroud)
该功能适用于以下调用
x = runif(100, 0, 100);
y1 = foo(x, n = 5, style = 'quantile');
y2 = foo(x, style = 'equal');
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用style ='fixed'参数时,我需要一个fixedBreaks参数
y3 = foo(x, style = 'fixed', fixedBreaks = seq(0, 100, 20))
Run Code Online (Sandbox Code Playgroud)
eval中的错误(expr,envir,enclos):...列表不包含2个元素
请注意,以下工作完美
y5 = classIntervals(x, style = 'fixed', fixedBreaks = seq(0, 100, 20))
Run Code Online (Sandbox Code Playgroud)
我怀疑这与范围规则有关,但一直无法指责它.任何有关这方面的帮助将非常感谢.
编辑.我拼凑了一个更简单的黑客,使它工作.我认为这是一个match.call问题,因为style ='pretty'存在同样的问题.快速查看代码显示这些是match.calls的两种样式,所以很可能这是错误的来源.无论如何,这是我提出的黑客攻击
foo2 <- function(x, ...){
require(classInt);
y = list(...); y$var = x;
intvl = do.call('classIntervals', y);
}
y6 …Run Code Online (Sandbox Code Playgroud) 如果在"use strict"中不允许arguments.callee,我们就做不到
var f = function g() {
//g
}
Run Code Online (Sandbox Code Playgroud)
因为在IE中不起作用(或者说"奇怪")http://kangax.github.com/nfe/#jscript-bugs,那么我们还有哪些其他选项可以引用函数中的匿名函数本身?
所以我知道在Scheme中定义的是动态作用域,并且允许静态作用域,但是下面的内容让我困惑:
如果我有
(let ((x 0))
(define f (lambda () x))
(display (f))
(let ((x 1))
(display (f))
)
)
Run Code Online (Sandbox Code Playgroud)
它将显示00.到目前为止一切顺利.但是,如果我为x添加额外的定义,如下所示:
(let ((x 0))
(define f (lambda () x))
(display (f))
(define x 4)
(let ((x 1))
(display (f))
)
)
Run Code Online (Sandbox Code Playgroud)
它将显示undefined4.为什么是这样?为什么在评估f 之后定义x 会影响(f)的返回值?为什么返回值"未定义"?
还值得一提的是,用letrec而不是define绑定f也会起作用:
(let ((x 0))
(letrec ((f (lambda () x)))
(display (f))
(define x 4)
(let ((x 1))
(display (f))
)
)
)
Run Code Online (Sandbox Code Playgroud)
返回00.
注意:我使用了DrRacket,上面写着"Pretty Big"
我想确定一个对象是否存在于R中的函数内:
foo <- function() {
y <- "hello"
if (exists(y, envir = sys.frame())) print(y)
}
foo()
Run Code Online (Sandbox Code Playgroud)
存在错误(y,envir = sys.frame()):第一个参数无效
我想添加envir = sys.frame()就可以了.也试过了envir = environment()
预期
foo()
"hello"
Run Code Online (Sandbox Code Playgroud) 我有一个foo包含类的包FStream.package对象foo定义了一些提供扩展器方法的隐式值类FStream.我想将这些值类从包对象中移出并放入它们自己的单独文件中,但我也希望它们在我使用时始终可用FStream(或者最好是当我使用foo包中的任何东西时.是否可以实现这一点?我尝试将隐式值类放入其他对象中,但我无法从对象扩展.尝试将它们放在类或特征中,但隐式值类只能在其他对象中定义.
富/ FStream.scala
package foo
class FStream {
def makeFoo(): Unit = ???
}
Run Code Online (Sandbox Code Playgroud)
富/ package.scala
package foo
package object foo {
// I want to move these definitions into separate files:
implicit class SuperFoo(val stream: FStream) extends AnyVal {
def makeSuperFoo(): Unit = ???
}
implicit class HyperFoo(val stream: FStream) extends AnyVal {
def makeHyperFoo(): Unit = ???
}
}
Run Code Online (Sandbox Code Playgroud)
酒吧/ usage.scala
package bar
import foo._ // …Run Code Online (Sandbox Code Playgroud) 我进行了全面搜索,无法提出合理的搜索查询来产生有用的结果。我将尝试通过一个简单的示例(已测试)对此进行解释。
假设我有一些小的自定义Python库,其中仅包含以下私有类和公共实例:
#!/usr/bin/env python
class _MyClass(object):
def __init__(self):
self.val = "Default"
my_instance = _MyClass()
Run Code Online (Sandbox Code Playgroud)
现在,我还有另外两个python文件(“ file_a”和“ file_b”),最终将从我的库中导入此实例,如下所示。
“ file_a”中的完整代码:
#!/usr/bin/env python
from my_lib import my_instance
my_instance.val = "File A was here!"
import file_b
file_b.check_val()
Run Code Online (Sandbox Code Playgroud)
“ file_b”中的完整代码:
#!/usr/bin/env python
from my_lib import my_instance
def check_val():
print "From 'file_b', my_instance.val is: {}".format(my_instance.val)
Run Code Online (Sandbox Code Playgroud)
如果仅在还包含“ file_b”和“ my_lib”的目录中执行“ file_a”,则结果输出为:
#!/usr/bin/env python
class _MyClass(object):
def __init__(self):
self.val = "Default"
my_instance = _MyClass()
Run Code Online (Sandbox Code Playgroud)
有人可以在我的示例中向我解释'file_b'如何访问与'file_a'相同的实例吗?这与'file_a'中设置的值是全局值有关吗?
顺便说一句,我确实知道我可以再次公开“ MyClass”,并在“ file_a”或“ file_b”中需要唯一实例时将其实例化,但是我发布此问题的主要原因是为了解决问题这个特定的概念。
我想用lapply()R来计算几个模型,但似乎该update()函数无法处理通过生成的模型lapply().
一个最小的例子:
d1 <- data.frame(y = log(1:9), x = 1:9, trt = rep(1:3, each = 3))
f <- list(y ~ 1, y ~ x, y ~ trt)
modsa <- lapply(f, function(formula) glm(formula, data = d1))
modsb <- lapply(f, glm, data = d1)
update(modsa[[1]], data = d1[1:7, ])
#> Error: object of type 'closure' is not subsettable
update(modsb[[1]], data = d1[1:7, ])
#> Error in FUN(formula = X[[i]], data = d1[1:7, ]): could not find …Run Code Online (Sandbox Code Playgroud)