是否有一些等同于在r中表达let表达式?举个例子来看看这个简单的haskell代码:
MERGE (t:Tweet{tweet_id:{tweet_id}})
ON CREATE SET
t.text={text},
t.language={language},
t.created_at={created_at},
t.retweetcount={retweetcount},
t.likecount={likecount},
t.location={location}
ON MATCH SET
t.retweetcount={retweetcount},
t.likecount={likecount}
非常感谢提前。
答案 0 :(得分:5)
一个等价物是lambda function,您可以在一个声明中定义和调用:
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
第一个(function(x) x+1)(x = 1)
部分定义一个函数,而第二个()
部分调用该函数,为名为()
的参数提供1
的值。
答案 1 :(得分:3)
如果这样做的目的是使x
仅在该表达式中可用,则环境可以提供此功能:
#make an environment
myenv <- new.env()
#assign 1 to variable x in our environment
myenv$x <- 1
#evaluate the expression within our environment
with(myenv, x + 1)
#[1] 2
#x only works within our created environment and not on the global environment
#(i.e. the default environment when working on the console)
x + 1
#Error: object 'x' not found
根据@Roland的评论,这可以缩短为local({x <- 1; x + 1})
。请参阅?local
。
答案 2 :(得分:2)
以下是一些:
x <- 100
# 1
with(list(x = 1), x + 1)
## [1] 2
# 2
local(x + 1, list(x = 1))
## [1] 2
# 2a
local({
x <- 1
x + 1
})
## [1] 2
# 3
eval(substitute(x + 1, list(x = 1)))
## [1] 2
# 4
library(wrapr)
let(c(x = "1"),
x + 1,
subsMethod = "stringsubs",
strict = FALSE)
## [1] 2
x
## [1] 100
lambda.r包中还有一个open issue来添加let
。
答案 3 :(得分:0)
一个等价的函数是 lambda 函数,您可以使用
函数体内的隐式 local({ })
(这是@ArtemSokolov 答案的稍微改进的答案)。
(function() {
x <- 1
x + 1
})()
这相当于
local({
x <- 1
x + 1
})