小编Kur*_*aga的帖子

奇怪的 SimpleDelegator 行为

有我的代码使用SimpleDelegator

require 'delegate'

class Foo < SimpleDelegator
  def meth
    p 'new_meth'
  end
end

class Bar
  def meth
    p 'old_meth'
  end

  def bar_meth
    meth
  end
end

bar = Bar.new
foo = Foo.new(bar)
foo.meth      #=> "new_meth"
foo.bar_meth  #=> "old_meth"
Run Code Online (Sandbox Code Playgroud)

为什么最后一行给出"old_meth"???!!!谢谢!

ruby delegation

5
推荐指数
1
解决办法
1328
查看次数

Ruby:从内部方法访问attr_accessor的方法

我有一个代码:

class A
  attr_accessor :somevar

  def a
    somevar = 'something'
    puts @somevar
  end

  def b
    send :somevar=, 'something'
    puts @somevar
  end

end

A.new.a #=> nil
A.new.b #=> 'something'
Run Code Online (Sandbox Code Playgroud)

为什么会有区别?为什么我不能通过编写器分配实例变量?但是为什么已经调用了局部变量而不是方法(setter)呢?

ruby attr-accessor

2
推荐指数
1
解决办法
2788
查看次数

Ruby:方法的钩子

我想找到一个gem或者编写一个实现方法钩子的代码.

class A
  include SomeModule
  before_hook :meth, lambda { puts 'bla' }

  def meth
    puts 'meth'
  end
end

# A.new.meth => "bla\nmeth\n"
Run Code Online (Sandbox Code Playgroud)

我正在使用Rails,但我知道回调和过滤器

  • meth 不是一个动作
  • 我不想改变我的方法调用方式

请帮帮我...

UPDATE

我发现了一个用于自动化此代码的gem:

  include ActiveSupport::Callbacks
  define_callbacks :meth_callback

  set_callback :meth_callback, :before do |object|
    # my code
  end

  def meth_with_callback
    run_callbacks(:meth_callback) { meth }
  end

  alias_method_chain :meth, :callback
Run Code Online (Sandbox Code Playgroud)

ruby gem ruby-on-rails

-1
推荐指数
1
解决办法
1204
查看次数

标签 统计

ruby ×3

attr-accessor ×1

delegation ×1

gem ×1

ruby-on-rails ×1