你就没看我 link 的文章。其指出,R 的 scope 是个非常大的问题。 f = function() { if (runif(1) > .5) x = 10 x } The x being returned by this function is randomly local or global.
【在 p****e 的大作中提到】 : R 特点就是快粗猛,用来验证各种模型 : 非得跟java之类一样才是没道理
【在 c*****t 的大作中提到】 : 你就没看我 link 的文章。其指出,R 的 scope 是个非常大的问题。 : f = function() { : if (runif(1) > .5) : x = 10 : x : } : The x being returned by this function is randomly local or global.
【在 c*****t 的大作中提到】 : 你就没看我 link 的文章。其指出,R 的 scope 是个非常大的问题。 : f = function() { : if (runif(1) > .5) : x = 10 : x : } : The x being returned by this function is randomly local or global.
是这样的。但是这个设计跟其它语言都很不一样。特别是习惯了 closure 的人 很容易犯这种错误。另一方面,这种设计其实是要让用户在 compile time 的时候想到 run time 的情形。有点类似 global everywhere 的感觉。 要是一天到晚只做 R 还好,如果几种语言经常换的话,太容易出错了。 解决办法不是没有,比如说所有的变量都是 pass in,然后在 function 开头 init 所有要用的 local variable 。但是,写 R 的有多少人能做到这样严格 写程序 ?甚至这语言本身的设计鼓励大家滥用这种东西。
【在 c*****t 的大作中提到】 : 是这样的。但是这个设计跟其它语言都很不一样。特别是习惯了 closure 的人 : 很容易犯这种错误。另一方面,这种设计其实是要让用户在 compile time : 的时候想到 run time 的情形。有点类似 global everywhere 的感觉。 : 要是一天到晚只做 R 还好,如果几种语言经常换的话,太容易出错了。 : 解决办法不是没有,比如说所有的变量都是 pass in,然后在 function 开头 : init 所有要用的 local variable 。但是,写 R 的有多少人能做到这样严格 : 写程序 ?甚至这语言本身的设计鼓励大家滥用这种东西。