簡體   English   中英

class_eval如何將參數傳遞給方法

[英]class_eval how to pass parameter to method

如何在以下情況下傳遞參數名稱...在傳遞給class_eval之前評估名稱


class Foo

end

Foo.class_eval %Q{
def hello(name)
 p "hello #{name}"
end
}

抱歉沒有給出整個場景......我只想動態地向一個類添加一個實例方法,該方法應該能夠接受參數...上面的代碼不會編譯抱怨名稱沒有被定義為局部變量在執行irb ..

謝謝

其他答案是“正確”答案,但您也可以跳過p調用內插:

Foo.class_eval %Q{
  def hello(name)
    p "hello \#{name}"
  end
}

我以為你想改變實際的參數名稱(可能對完成或在動態方法上使用Pry時有用),這里假設它在全局中,但也可以傳遞給執行class_eval的方法:

Foo.class_eval %Q{
  def hello(#{$argname})
    p "hello \#{$argname}"
  end
}

真的很簡單:

Foo.class_eval do
    def hello(name)
        p "hello #{name}"
    end
end

嘗試將塊傳遞給class_eval而不是數組( 來自此鏈接 ):

class Foo
end

Foo.class_eval {
  def hello(name)
    p "hello #{name}"
  end
}

然后,您可以通常的方式調用實例方法hello

boo = Foo.new
boo.hello("you")

產生:

>> boo.hello("you")
"hello you"
=> nil
class Foo
end

Foo.class_eval do
  define_method :hello do |name|
    p "hello #{name}"
  end
end

Foo.new.hello("coool") # => "hello coool"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM