【发布时间】:2019-04-27 16:48:05
【问题描述】:
似乎在(双引号)heredoc 中使用gsub 不会评估gsub 的结果,如下所示:
class Test
def self.define_phone
class_eval <<-EOS
def _phone=(val)
puts val
puts val.gsub(/\D/,'')
end
EOS
end
end
Test.define_phone
test = Test.new
test._phone = '123-456-7890'
# >> 123-456-7890
# >> 123-456-7890
第二个puts 应该打印1234567890,就像在这种情况下一样:
'123-456-7890'.gsub(/\D/,'')
# => "1234567890"
heredoc 里面发生了什么?
【问题讨论】:
-
请注意,您可以在没有类 eval 的情况下完成此操作(因此不必担心字符串转义)。只需将
class_eval和def _phone替换为define_method :_phone do |val|