如何在 Ruby 中执行以下操作?
由于按值传递参数,它不能按预期工作。
def validate! msg
if msg.is_a?(String)
msg = [ msg ]
end
end
#replace
如果 msg 被另一个字符串替换,则可以使用。
如何在 Ruby 中执行以下操作?
由于按值传递参数,它不能按预期工作。
def validate! msg
if msg.is_a?(String)
msg = [ msg ]
end
end
#replace
如果 msg 被另一个字符串替换,则可以使用。
正如另一个答案所指出的那样,您不能将字符串原位变异为数组。
您可以使用定义的方法重置指针。但您实际上可以通过使用#Array 做得更好:
msg = 'string'
msg = Array(msg)
#=> msg = ['string']
msg = ['array']
msg = Array(msg)
#=> msg = ['array']
虽然某些类具有允许您改变对象的实例方法,但您不能将一个对象改变为另一个类。在这种情况下,您不能将 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"]