我@event
在控制器中有此变量,我想@event
在所有视图中访问此变量。我不想将其设为全局变量。还有其他方法可以做到吗?我正在使用Rails 4.1。
我有一个函数,它将函数列表作为参数.
library(moments)
library(plyr)
tests <- list(mean, varience, skewness, kurtosis)
f <- function(X, tests){
out <- each(... = tests)(X) #each from plyr
names(out) <- GetNames(tests)
out
}
Run Code Online (Sandbox Code Playgroud)
我想GetNames
获取对象列表,在本例中为函数,并将对象的名称作为文本返回.理想情况下,我想GetNames
使用任何命名对象列表:
> GetNames(tests)
[1] "mean" "varience" "skewness" "kurtosis"
Run Code Online (Sandbox Code Playgroud)
as.character(tests)
返回每个函数的代码文本,而不是它们的名称.
我试过了:
GN <- function(X) deparse(substitute(X))
GetNames <- function(X) lapply(tests, GN)
GetNames(tests)
Run Code Online (Sandbox Code Playgroud)
但这回归:
[[1]]
[1] "X[[i]]"
[[2]]
[1] "X[[i]]"
[[3]]
[1] "X[[i]]"
[[4]]
[1] "X[[i]]"
Run Code Online (Sandbox Code Playgroud)
在编写R代码时,我经常遇到这个问题的一些版本.我想要一个函数来评估它的参数的一些步骤,这里从tests
它的对象的名称开始一步,然后停止并让我对结果做一些事情,这里将它们转换为字符串,而不是继续得到所指的对象我可以抓住它们之前的名字(名字).
许多函数用于多个文件.所以,我一直在重构我的JS,所以我可以为所有不同的文件提供单一功能服务.我是JS的新手并且正在阅读文档,看起来全局变量在整个应用程序中都可用.
如果我创建一个全局变量,比如说Total
,这个变量名在我的应用程序的其他几个部分中使用.我不希望不同的Total
s 之间发生冲突......但是,我确实希望利用一个共同的功能,calculateTotals()
.鉴于它是一个多用户应用程序,我需要"隔离" Total
另一个的每个实例.我不想诉诸于他们所有不同的名字.
那么 - 如何制作一个特定于单个文件的"全局变量"?
我在TypeScript中有以下类,在Angular 2中用作Pipe来渲染降价。它编译没有错误,但是在运行时在标记的行上遇到了异常:
var Remarkable = require('remarkable');
@Pipe({
name: 'markdown'
})
export class MarkdownPipe implements PipeTransform {
public remarkable;
constructor(private sanitizer: DomSanitizationService) {
this.remarkable = new Remarkable({
typographer: true
});
this.remarkable.use(this.parseVideos);
}
transform(value: string) : SafeHtml {
if (value != null) {
return this.sanitizer.bypassSecurityTrustHtml(this.remarkable.render(value));
}
return null;
}
public parseVideos(md) : void {
md.inline.ruler.push('video', (state) => {
return this.parseMedia(state, '@', 'video'); // this is undefined
});
}
public parseMedia(state, startingMarker, tokenName) : boolean {
// do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试执行此代码时,出现运行时错误告诉我:
凡是 …
您是否必须在R中明确定义自定义函数的环境,还是在创建函数时自动"创建"(定义?)?
我想知道创建一个函数是否自动在所述函数中创建一个环境,或者是否需要显式创建环境.如果前者为真(即自动创建环境),我该如何明确引用它?
我必须首先为所述函数创建一个新环境(即,通过使用指定一个新环境new.env
)或者我可以简单地使用其他一些语法(可能类似于" current.env()
")吗?
我能想出的唯一一个简单的例子是assign
函数内部的函数.
function(a,b) {
assign(paste(a,b,sep='.'), 'help me', envir = ONLY CURRENT FUNCTION)
}
Run Code Online (Sandbox Code Playgroud) 出于某种原因,我无法访问变量.可能是范围问题,或时间问题,无法找到它.这是我的简化代码:
var endResult = "";
//function loads html into given element.Called as a callback later when google maps direction service is done//
function getResults(){
$.ajax({
url:'foo.php',
data: endResult,
//etc., response loaded asynchronously in div element//
});
}
//when form is submitted
$('#form').submit(function(){
var endResult = "";
//get form data, define variable//
$.post('bar.php',function(data){
var location = data;
//initialize Maps Directions Service//
var directionService = new google.maps.DirectionsService();
//function gets directions, and loads a single value into global variable "endResult"//
function calcRoute(){
var …
Run Code Online (Sandbox Code Playgroud) 我想转换IO [String]
到[String]
具有<-
约束力.但是,我需要do
在一个where
声明中使用一个块来做到这一点,但是Haskell一直抱怨缩进.这是代码:
decompEventBlocks :: IO [String] -> IO [[String]]
decompEventBlocks words
| words' /= [] = block : (decompEventBlocks . drop $ (length block) words')
| otherwise = []
where
do
words' <- words
let block = (takeWhile (/="END") words')
Run Code Online (Sandbox Code Playgroud)
这是什么原因?我们如何do
在where
声明中使用块?而且,我们是否有机会在警卫面前发表一些声明?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title>test</title>
</head>
<body>
<script type="text/javascript" charset="utf-8">
(function(){
// this
var test=function(){
//this
return function(){
//this
};
}
(function(){
//this
var a={
p1:function(){
//this
}
};
})();
})();
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中有以下代码.
MyEventHandler handler = null; //Declare the handler
foreach (string pname in group)
{
handler = getHandler(pname); //Get the handler
if(handler == null)
{
throw new KeyNotFoundException("No user " + pname + " could be found");
}
//invoke the handler
handler.BeginInvoke(this, e, new AsyncCallback(EndAsync), null);
}
Run Code Online (Sandbox Code Playgroud)
所以我得到了处理程序和调用BeginInvoke
方法.但是在BeginInvoke
被调用之前它会进入下一次迭代并且处理程序值会发生变化.因此BeginInvoke
,这个新的处理程序正在参与其中.
希望你明白我的观点.那我怎么能消除这个问题呢?BeginInvoke
因为我觉得这是一个时间的流逝,我不想打电话给睡觉.
有任何想法吗?
Update1 我很确定在调用BeginInvoke()之前处理程序对象会被更改.我猜BeginInvoke需要一些时间来创建一个单独的线程来调用另一个函数.
UPDATE2 此代码位于WCF服务中,客户端调用一个函数,该函数依次使用此函数.我为每个客户端分别存储在我的服务器中的处理程序.WCF服务具有双工合同,为客户端分隔会话.我看到执行此函数后,同一个用户被调用两次.但我设置了一个断点并调试它(这给BeginInvoke提供了调用函数所需的时间)它"完美地"工作.我非常确定我在线程中也遇到了这个问题,我在循环中创建了多个线程.如果线程委托具有参数a,b,c,并且如果在下一次迭代开始时更改它,则会发生相同的行为.我之前有多少人遇到过这个问题.如果我放一个Sleep()或者如果我复制一个处理程序并使用copy调用它就可以了.
UPDATE3
好的,我现在已经测试过了.我刚刚添加了Thread.Sleep(),如下所示.
chatTo.BeginInvoke(this, e, new AsyncCallback(EndAsync), null);
Thread.Sleep(500);
Run Code Online (Sandbox Code Playgroud)
它的工作就像一个魅力.有什么想法吗?
更新4
我创建了一个演示问题的线程示例,我已将其上传到此处.我希望解决这个问题也能解决我的问题.请检查样品.
scope ×10
javascript ×4
r ×2
this ×2
variables ×2
.net ×1
ajax ×1
angular ×1
asynchronous ×1
c# ×1
coldfusion ×1
coldfusion-8 ×1
do-notation ×1
environment ×1
evaluation ×1
function ×1
google-maps ×1
haskell ×1
jquery ×1
monads ×1
names ×1
ruby ×1
substitution ×1
typescript ×1