根据对此question
的回复有关接收器的指针与值的规则是可以在指针和值上调用值方法,但只能在指针上调用指针方法
但实际上我可以对非指针值执行指针方法:
u_2 <- function(x, y){
x <- deparse(substitute(x))
y <- deparse(substitute(y))
tdata$zh[grep(x, tdata$ko, ignore.case = T)] <- y
tdata
}
u_2(choyo, 加油)
那么,这里有什么问题?这是一个新功能吗?或者对问题的回答是错误的?
答案 0 :(得分:8)
您正在调用&#34;指针方法&#34;在指针值上。在表达式中:
c.fourWheels()
c
的类型为car
(非指针);因为car.fourWheels()
方法有一个指针接收器,并且因为接收器值是非指针并且是可寻址的,所以它是一个简写:
(&c).fourWheels()
如果
x
为addressable且&x
方法集包含m
,则x.m()
是(&x).m()
的简写。< / p>
声明:
有关接收器的指针与值的规则是可以在指针和值上调用值方法,但只能在指针上调用指针方法
解释如下:
如果你有一个值方法,你可以总是调用它:如果你有一个值,它就可以成为接收者;如果你有一个指针,你总是可以取消引用它以获得准备成为接收者的值。
如果你有一个指针方法,如果只有一个值,可能并不总是来调用它,因为有几个表达式(其结果)不可寻址,并且因此,您将无法获得将用作接收器的指针;这样的例子是函数返回值和映射索引表达式。有关详细信息和示例,请参阅How can I store reference to the result of an operation in Go?;和How to get the pointer of return value from function call?(当然,你总是可以将它分配给一个局部变量并获取它的地址,但那个副本并且指针方法只能修改这个副本而不是原始副本。)