簡體   English   中英

如何使用Ruby 1.8.7將哈希傳遞到class_eval'ed方法中?

[英]How can I pass a hash into a class_eval'ed method with Ruby 1.8.7?

我正在嘗試在黃瓜測試中模擬OpenID處理。 為此,我使用以下方法:

def set_result_of_openid_authentication(result_type, profile_data = nil)
  ActionController::Base.class_eval "
    def begin_open_id_authentication(identity_url, options = {})
      yield [OpenIdAuthentication::Result.new('#{result_type}'.to_sym), identity_url, #{profile_data}]
    end
  "
end

# example usage
set_result_of_openid_authentication :successful, 'email' => 'dhofstet@example.com'

這在Ruby 1.9.2上可以正常工作,但是在Ruby 1.8.7下,我得到以下編譯錯誤:

(eval):5:in `set_result_of_openid_authentication': compile error
(eval):3: syntax error, unexpected tIVAR, expecting kDO or '{' or    '('    
...identity_url, emaildhofstet@example.com]

由於某種原因,哈希值未保留。是否存在一些變通辦法,使其可以同時與兩個紅寶石一起使用?

謝謝。

看來問題是在您的class_eval內部,內插字符串#{profile_data}是作為emaildhofstet@example.com通過的,它是1.8.7中Hashto_s表示。

如果將其替換為#{profile_data.inspect}則它應根據需要以{'email' => 'dhofstet@example.com'}形式出現。

暫無
暫無

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

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