Ruby 函数名容易与变量名冲突

hgyxbll · 发布于 2016年12月27日 · 最后由 bianjp 回复于 2016年12月29日 · 752 次阅读
10447

ruby的函数名是小写加下划线, 变量名也是小心加下划线, 写的时候应该很容易冲突(即重名)吧. 大家有没有这种情况.

不过小写函数名确实比较好看.

共收到 11 条回复
96

方法名用动词,变量名用名词

10447

#1楼 @piecehealth 很多时候方法名是名字, 比如 File.log_size,
如果此时我用 a = File.new() log_size = a.log_size 变量名就和函数名一样了,

2
  • 有作用域和优先级的
  • 变量名冲突的问题是习惯导致的,和命名风格没关系,你可以有很多方式避免
  • 实际的使用场景中,我们时常可能会故意声明一个和变量(或 attr)名称相同的函数,这是 Ruby 的特性例如:
class Foo
  attr_accessor :name

  def name
    return 'None' if @name.blank?
    @name
  end
end
1

#2楼 @hgyxbll log_size 和 a.log_size 不冲突啊。

10447

#4楼 @Rei 这里名字已经相同了, 幸好是在File类外面, 如果在File类里某个函数定义一个log_size变量, 然后调用函数log_size赋值, 再进行一些运算, 不知道大家有没有碰到这种情况?

10447

#3楼 @huacnlee 有时我们定义了一些全局函数, 比例log_size, 然后在某个地方我们会定义局部变量log_size = log_size(), 然后对这个局部变量进行计算, 这就涉及到名字冲突,或者不易读, 这两个名字改如何命名才能又易读又不冲突呢?这命名就是我所烦恼的事情, 不知你有没有碰到过, 对这种情况改如何解决. PS: 类型命名比较好,不会和变量冲突, 比如AlarmInfo, 定义变量alarm_info.

17727

如果函数是无需参数的,那就别用局部变量,每次都调用函数。

如果该函数计算很耗性能,就用该函数所属类的实例变量缓存一下

即使那个类不是你自己写的,也可以prepend、extend来制造缓存吧

96

我刚用 ruby 的时候也遇到这个问题 后来我都是优先使用方法

23224
f = Foo.new
f.name = "12" # 属性
f.name # 方法调用

 是这样的吗?我测试了一下是这样的

8744

#9楼 @helapu 其实都是方法调用

25402

摘自 Programming Ruby 1.9&2.0

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册