ruby方法名

ruby方法名,ruby,Ruby,对于我在ruby中工作的项目,我覆盖了method_missing方法,这样我就可以使用如下方法调用来设置变量,类似于在ActiveRecord对象中设置变量: Object.variable\u name='newvalue' 然而,在实现了这一点之后,我发现许多变量名中都有句点(.)。我发现了以下解决方法: Object.send('variable.name=','newvalue') 然而,我想知道是否有一种方法可以逃避这段时间,这样我就可以使用它了 Object.variable.na

对于我在ruby中工作的项目,我覆盖了method_missing方法,这样我就可以使用如下方法调用来设置变量,类似于在ActiveRecord对象中设置变量:

Object.variable\u name='newvalue'

然而,在实现了这一点之后,我发现许多变量名中都有句点(.)。我发现了以下解决方法:

Object.send('variable.name=','newvalue')

然而,我想知道是否有一种方法可以逃避这段时间,这样我就可以使用它了

Object.variable.name='newvalue'
不要这样做

尝试创建在您的语言中无效的标识符不是一个好主意。如果确实要设置这样的变量,请使用属性宏:

attr_writer :bar
attr_reader :baz
attr_accessor :foo
好了,既然你已经被警告了,下面是怎么做的。只要在每次获得常规访问器时返回同一类的另一个实例,并在运行时收集所需的信息即可

class SillySetter
  def initialize path=nil
    @path = path
  end

  def method_missing name,value=nil
    new_path = @path ? "#{@path}.#{name}" : name
    if name.to_s[-1] == ?=
      puts "setting #{new_path} #{value}"
    else
      return self.class.new(path=new_path)
    end
  end
end

s = SillySetter.new
s.foo = 5              # -> setting foo= 5
s.foo.bar.baz = 4      # -> setting foo.bar.baz= 4

我不想鼓励鲁比·希林内斯,但我就是忍不住

如果无法更改规范名称,可以手动为getter和setter别名:

def variable_name
 send 'variable.name'
end

def variable_name=(value)
 send 'variable.name=', value
end

我能想到这样做的唯一原因是,如果你真的很讨厌在你之后维护代码的人

我不是说“他撞死了我的狗”的仇恨

我指的是寺庙里真正的热气腾腾的脉脉

所以,简而言之,不要…:-)