0

我正在使用 slackr 包向 Slack 发布消息。我有以下代码在函数外工作(即两次向 Slack 发布两条消息),但在函数内使用时,使用函数外部的变量值,而不是函数内设置的变量值。

一个例子将有助于说明。

> n = 2
> 
> # Run a loop, send to slack.  Display content.
> aMsg <- NULL
> for ( i in 1:n ) {
+   msg <- NULL
+   msg <- paste0("Completed ", i, " iteration from loop @ ", Sys.time())
+   aMsg <- c(aMsg, msg)
+   slackr(paste(msg))
+ }
> slackr(aMsg[1], aMsg[2])
> 
> aMsg
[1] "Completed 1 iteration from loop @ 2015-07-29 10:12:45"
[2] "Completed 2 iteration from loop @ 2015-07-29 10:12:46"
> SendToSlack <- function(n) {
+   
+   slackr("Now post to Slack from function")
+   aMsg <- NULL
+   for ( i in 1:n ) {
+     msg <- NULL
+     msg <- paste0("Completed ", i, " iteration from function @ ", Sys.time())
+     aMsg <- c(aMsg, msg)
+     slackr(paste(msg))
+   }
+   slackr(aMsg[1], aMsg[2])
+   return (aMsg)
+   
+ }
> 
> output <- SendToSlack(n)
> output
[1] "Completed 1 iteration from function @ 2015-07-29 10:13:04"
[2] "Completed 2 iteration from function @ 2015-07-29 10:13:04"
> 

从上面的代码片段中,我希望从函数外部的循环中获得两条消息,然后在循环之后从对 slackr() 的调用中获得两条消息。输出中的 min:seconds 将是 12:45, 12:46,然后是 12:45, 12:46。

从对函数的调用,我再次期望来自函数内循环的两条消息,然后在循环之后来自对 slackr() 的调用的相同两条消息。min:seconds 应该是 13:04, 13:04 然后 13:04, 13:04。

附图是我在 Slack 中实际得到的输出。循环按预期工作,但由于某种原因,从函数调用 slackr() 时使用的变量值与调用函数之前的值一样(即函数根本不会更改 msg 和 aMsg)。但是,slackr 确实将字符串“Now post to Slack from function”从函数发布到 Slack。

有人知道这里发生了什么吗?与全球环境有关吗?很奇怪!

松弛输出

4

1 回答 1

1

@hrbrmstr 提供的新版本解决了这个问题

于 2015-07-30T01:50:14.087 回答