亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何根據方法的名稱動態調用方法?

如何根據方法的名稱動態調用方法?

嗶嗶one 2019-06-26 16:54:30
如何根據方法的名稱動態調用方法?當方法的名稱包含在字符串變量中時,如何動態調用它?例如:class MyClass   def foo; end   def bar; endendobj = MyClass.new str = get_data_from_user  # e.g. `gets`, `params`, DB access, etc.str  #=> "foo"# somehow call `foo` on `obj` using the value in `str`.我該怎么做?這樣做會帶來安全風險嗎?
查看完整描述

3 回答

?
泛舟湖上清波郎朗

TA貢獻1818條經驗 獲得超3個贊

你想做的事叫做動態調度..在Ruby中很容易,只需使用public_send:

method_name = 'foobar'obj.public_send(method_name) if obj.respond_to? method_name

如果方法是私有的/受保護的,請使用send相反,但更喜歡public_send.

如果method_name來自用戶。為了防止漏洞,您應該驗證哪些方法可以實際調用。例如:

if obj.respond_to?(method_name) && %w[foo bar].include?(method_name)
  obj.send(method_name)end


查看完整回答
反對 回復 2019-06-26
  • 3 回答
  • 0 關注
  • 796 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號