2017-04-09 49 views
0

我看了一下發送方法的名稱,如紅寶石參數,但是在我的情況下,我想允許用戶選擇文摘格式並使用答案設置摘要類型:傳遞一個常量名到另一個方法

def hash_digest(file, argument) 
    format = Digest::argument.new #using the argument here 

    ... 

end 

hash_digest(filename, :MD5) 

我曾嘗試:

def hash_digest(file, argument) 
    format = Digest::send(argument).new 
    ... 
end 

hash_digest(filename, :MD5) 

但我得到一個沒有方法'MD5' 的錯誤,儘管MD5是在摘要方法的有效算法。確切的錯誤是:

send': undefined method MD5' for Digest:Module (NoMethodError) – 

這是可能的紅寶石?

+0

我不認爲這是可能的。 –

+0

你可能是對的,我想我會看看是否有人有任何漂亮的技巧! –

+0

'Digest.const_get(:MD5).new' –

回答

1

我相信這個工程:

require 'digest' 

def hash_digest(file, digest_algorithm) 
    format = Digest.const_get(digest_algorithm).new 
end 

hash_digest('test', 'SHA256') 

此外,由於選項的數目是相當小的,你總是可以只使用一個case聲明:

require 'digest' 

def hash_digest(file, digest_algorithm) 
    format = case digest_algorithm 
      when 'HMAC' then Digest::HMAC.new 
      when 'MD5' then Digest::MD5.new 
      when 'RMD160' then Digest::RMD160.new 
      when 'SHA1' then Digest::SHA1.new 
      when 'SHA256' then Digest::SHA256.new 
      when 'SHA384' then Digest::SHA384.new 
      when 'SHA512' then Digest::SHA512.new 
      end 
end 

hash_digest('test', 'SHA256') 
+0

不幸的是,我得到:/usr/lib/ruby/2.3.0/digest.rb:16:in' const_missing':找不到類庫Digest :: Digest - 摘要/摘要(LoadError) –

+0

是的,那是其他的選擇,我真的只是在大聲問,如果有可能的話。 –

+0

你第一次是對的,我犯了一個錯字,修正了錯字,它工作正常。感謝那! –

相關問題