2017-02-23 83 views
1

如何在Ruby中執行以下操作?如何用Ruby中的數組替換字符串參數?

由於傳值參數的原因,它無法按預期工作。

def validate! msg 
    if msg.is_a?(String) 
    msg = [ msg ] 
    end 
end 

#replace如果味精正在用另一個字符串替換都可以使用。

+2

你是什麼意思'如何在Ruby中執行以下操作?'?這不是一個紅寶石代碼嗎? – emaillenin

+0

@emaillenin - 我的意思是'msg'沒有更新。我編輯了這個問題。 –

+2

解釋你想要完成的事情。這聽起來有點像你正在試圖讓msg _into_數組。如果是這樣,那麼這是不可能的。有些對象具有可以改變對象的方法,但即使在這些情況下,也不能將對象「變換」爲不同的類。正確的做法是隻使用一個新變量,並將其設置爲'[msg]'。用一種方法做到這一點很好。另外,'String'需要大寫或不能運行。 – Glyoko

回答

1

雖然有些類有實例方法允許您對對象進行變異,但不能將對象變爲另一個類。在這種情況下,您不能將String對象變爲Array對象。

如您所知,您的代碼將返回[msg]如果該消息是一個字符串。否則它將返回零。爲了使該方法總是返回一個數組,你可以使用一個三元像這樣:

def validate! msg 
    msg.is_a?(String) ? [msg] : msg 
end 

# ... 

my_msg = "message" 
my_validated_message = validate!(my_msg) # => ["message"] 

my_already_valid_message = ["different message"] 
my_revalidated_message = validate!(my_already_valid_message) # => ["different message"] 
1

由於其他答案已經指出的那樣,你不能代替字符串變異成一個陣列。
您可以使用您定義的方法重置指針。但你實際上可以使用#Array做一個:

msg = 'string' 
msg = Array(msg) 
#=> msg = ['string'] 

msg = ['array'] 
msg = Array(msg) 
#=> msg = ['array']