2009-07-24 34 views
0

我有點奇怪的情況。如果我使用散列,這個問題很容易,但是,我試圖在Ruby中使用「OpenStruct」,因爲它提供了一些非常酷的功能。(Ruby)將字符串值轉換爲OpenStructs的可分配屬性...?

基本上,我認爲我需要「常量化」一個返回值。我有一個正則表達式:

textopts = OpenStruct.new() 
    textopts.recipients = [] 
    fileparts = fhandle.read.split("<<-->>") 

    fileparts[0].chomp.each{|l| 
    if l =~ /Recipient.*/i 
     textopts.recipients << $& 
    elsif l =~ /(ServerAddress.*|EmailAddress.*)/i 
     textopts.$& = $&.split(":")[1] 
    end 
    } 

我需要一種方法來打開$ &爲「textopts」爲有效的屬性填充。我試過「constantize」和其他一些,但沒有任何工作。我會認爲這是可能的,但也許我錯了。顯然,如果我使用散列,我可以做「textopts [$ &] = .....」。

任何想法?

回答

2

保持您的解決方案的結構,這是做這件事:

textopts = OpenStruct.new(:recipients => []) 
    fileparts = fhandle.read.split('<<-->>') 

    fileparts.first.chomp.each_line do |l| 
    case l 
    when /Recipient.*/i 
     textopts.recipients << $& 
    when /(Server|Email)Address.*/i 
     textopts.send "#{$&}=", $&.split(':')[1] 
    end 
    end 

但我不禁想,這應該是一個適當的解析器。

+0

謝謝你。請定義「正確的解析器」。我基本上用電子郵件做了一些小事,並通過Ruby的NET :: SMTP模塊發送。我使用OptionParser來處理命令行項目,但我正在閱讀實際的文本文件。我期望在文本文件頂部存在某些參數,並且只需手動抓取這些項目,其餘部分實際上是電子郵件本身,將被「搶走」併發送出去。 – 2009-07-24 14:21:34

相關問題