我正在学习Scala,我正在尝试将函数存储在var中以便稍后对其进行评估:
var action:() => Any = () => {}
def setAction(act: => Any) {
action = act
}
Run Code Online (Sandbox Code Playgroud)
但那不编译:
错误:类型不匹配;
发现:任何
要求:()=>任何
行动=行为
所以在我看来,它action = act不是分配函数,而是评估它并分配结果.
我不知道如何在不评估的情况下分配函数.
谢谢!
通常,在需要访问事件时,您可以通过回调函数中指定的参数执行此操作:
$button.live("click", function(ev) {
// do something with ev here, like check 'ev.target'
}
Run Code Online (Sandbox Code Playgroud)
但相反(由于原因太复杂而无法进入此处),我不想使用匿名回调函数,而是指定要调用的函数,如下所示:
$button.live("click", functionToCall(ev, $(this));
Run Code Online (Sandbox Code Playgroud)
所以你会注意到我把'ev'作为functionToCall()的一个参数,但是这显然不起作用,因为我没有使用匿名回调函数.但我仍然需要访问functionToCall()中的click事件(以检查ev.target).我的问题是,如何访问此活动?如果我可以做这样的事情会很好:
$button.live("click", functionToCall($(this));
Run Code Online (Sandbox Code Playgroud)
和
function functionToCall($item) {
var target = $item.event("click").target;
// do something with target
}
Run Code Online (Sandbox Code Playgroud)
任何想法都将非常感激.谢谢.
我刚刚开始使用PHP,我想知道是否有一种方法可以将匿名函数添加到类实例中.
例如,让我们说......
class A{
public B;
}
$c = new A();
//This is where I am getting a little confused...
//The following wont work
$c->B = function(){echo('HelloWorld');};
$c->B();
Run Code Online (Sandbox Code Playgroud)
我希望做的是在大量不同的应用程序中重用相同的代码,并使其能够"替换"并替换特定实例中的函数.
我使用php5.3(所以匿名函数应该工作,只是不是我使用它们的方式).
非常感谢您的时间!
-GK
我正在尝试使用带有匿名函数的array_walk,但我总是得到错误
// Parse error: syntax error, unexpected T_FUNCTION in ... on line X
if(!empty($myArray)) {
array_walk($myArray, function(&$value, $key){ // Line X
$value = '"'.$value.'"'; // Add quotes
});
}
Run Code Online (Sandbox Code Playgroud)
周围的文件语法是正确的.有什么想法吗?
背景: 我有一个自学成才的爱好者对C++的理解水平,已经转化为对javascript的类似理解.为了更好地理解javascript,我决定编写一个Greasemonkey脚本来解决Google如何处理来自同一域的多个结果的问题.
我写了我的剧本,这简直太容易了.现在我觉得这个脚本对其他人有用,所以我想发布它.在我这样做之前,我想确定我不会发布不负责任的代码.
我知道糟糕的垃圾收集通常被认为是扩展的问题,并做了一些研究,我需要在javascript中做什么来防止这种情况.似乎答案是当函数退出时,函数中包含的任何内存都将被回收.这似乎解释了为什么我看到的一些流行脚本被包含在一个无用的功能中.
这引出了我这些问题:
这是我在许多脚本中看到的答案:
(function(){
//code goes here
})();
Run Code Online (Sandbox Code Playgroud)在上面的代码中,第一个括号的目的是什么?这对我来说似乎是多余的.
当我试图理解这一行时,我把它重写为:
(function main(){
//code goes here
})
main();
Run Code Online (Sandbox Code Playgroud)这个想法是,这只是调用以前未命名的功能.这不起作用,为什么?
我对一般答案更感兴趣,但如果需要这里是我目前的代码:http: //pastebin.com/qQWKfnJT
我有一个PHP代码,如下所示:
class A {
public function __construct() {
$this->b = new B(function($x) { return $x + 1; });
}
};
class B {
public function __construct($dataProcessingFunction) {
$this->dataProcessingFunction = $dataProcessingFunction;
}
public function processData($data) {
$f = $this->dataProcessingFunction;
return $f($data);
}
};
Run Code Online (Sandbox Code Playgroud)
但是有一个问题:我绝对需要在A的析构函数之前调用B的析构函数.你可以看到,这似乎是合理的.B对象不需要任何A,所以应该没有问题.
但是从PHP 5.4.0开始,闭包似乎会自动隐藏$ this.因此,我传递给B并由B存储的lambda函数包含对A的引用.
这意味着A包含指向B的指针,B包含指向A的指针(通过闭包).在这种情况下,PHP文档说只有垃圾收集和随机顺序调用析构函数.猜猜看:B的析构函数总是在A之前被调用.
有没有办法以优雅的方式解决这个问题?
我是一名JS开发人员,经常使用自动执行的匿名函数来最大限度地减少对全球范围的污染.
即:(JS)
(function(){
var x = ...
})();
Run Code Online (Sandbox Code Playgroud)
PHP中可行/建议使用相同的技术来最小化函数/变量名称冲突吗?
即:(PHP)
(function(){
$x = 2;
function loop($a){
...
}
loop($x);
})();
Run Code Online (Sandbox Code Playgroud) 有没有办法在PHP中序列化匿名函数?
我发现这个http://www.htmlist.com/development/extending-php-5-3-closures-with-serialization-and-reflection/
protected function _fetchCode()
{
// Open file and seek to the first line of the closure
$file = new SplFileObject($this->reflection->getFileName());
$file->seek($this->reflection->getStartLine()-1);
// Retrieve all of the lines that contain code for the closure
$code = '';
while ($file->key() < $this->reflection->getEndLine())
{
$code .= $file->current();
$file->next();
}
// Only keep the code defining that closure
$begin = strpos($code, 'function');
$end = strrpos($code, '}');
$code = substr($code, $begin, $end - $begin + 1);
return $code;
}
Run Code Online (Sandbox Code Playgroud)
但这取决于关闭的内部实现.
有没有未来计划实施封闭序列化?
关于Clojure中的线程宏,我必须要记住一些东西.
我有一个地图,其值也是地图,我想在另一个查找的结果中查找.让地图是一个简单的{:a {:b 2}}-首先我要查找的关键:a,那将产生{:b 2},再看看b,结果是2.第二次查找的关键需要是函数的结果.
((fn [x] (get x :b)) ({:a {:b 2} } :a ))
=> 2
Run Code Online (Sandbox Code Playgroud)
好吧,让我们用线程宏让它更具可读性.
(-> {:a {:b 2} } :a (fn [x] (get x :b)))
Run Code Online (Sandbox Code Playgroud)
即:a作为函数应用于地图然后应用另一个函数.嗯,这不起作用:
CompilerException java.lang.IllegalArgumentException: Parameter declaration :a should be a vector
奇怪的是,如果将匿名函数提取到命名函数,那么它可以正常工作:
(defn f [x] (get x :b))
(-> {:a {:b 2} } :a f)
=> 2
Run Code Online (Sandbox Code Playgroud)
甚至:
(def f (fn [x] (get x :b)) )
(-> {:a {:b …Run Code Online (Sandbox Code Playgroud)