2017-07-05 20 views
3

私は->の性質と混同しています。私は他の演算子と同様にその定義を得ることができず、<-のように振る舞いません。以下を参照してください:<-(または、私が試した他のオペレータ)で前方矢印演算子が見つかりません

`->` = `+` # attempting to hijack `->`, no error 
print(`->`) # function (e1, e2) .Primitive("+"), seems like it worked 
1 -> 3  # Error in 3 <- 1 : invalid (do_set) left-hand side to assignment 
1 -> test1 
print(test1) # 1, hijacking failed 
`->`(1,3) # 4, this works 

、:私はしようとすると、Rは任意のエラーが発生しませんけれども

print(`<-`) # .Primitive("<-") 
print(`->`) # Error in print(`->`) : object '->' not found 

また、私は、それをハイジャックすることはできません私はそれをすることができます:

`<-` = `+` 
print(`<-`) 
1 <- 3  # 4 
1 <- test2 # Error: object 'test2' not found 

rm(list=ls()) # back to sanity 

何が起こっているのですか?

答えて

4
> e <- quote(42 -> x) 
> e 
x <- 42 

Rで唯一の代入演算子があります:<-は(まあ、2:そこ=だけどさんは、物事を複雑にないようにしましょう)。 パーサーは、割り当てとしてシンボル「->」を解釈し、<-が使用されたかのように式を作成します。

2

答えよりもコメントが多いですが、長いかもしれません。

->はパーサによって処理され、割り当ての左右を検出してから<-を呼び出します。あなたのハッキングに続いて:

`<-` = `+` 
1 -> 3 
#[1] 4 

何が起こったのですか?あなたが明示的に呼び出さない限りパーサは、それを許可していませんので、行動する->オペレータへの時間は、基本的にありません:

`->` = `+` 
`->`(5,6) 
#[1] 11 
関連する問題