rails 路由和 when 以及其他一些我不记得的东西都有一个用户指定的模板字符串,如下所示:
template_str = "I am going to :place at :time"
Run Code Online (Sandbox Code Playgroud)
然后有一些神奇的函数可以嵌入数据代替:placeand :time,如下所示:
template_str.magic_embed_function(place: 'bed', time: '10 pm')
#=> "I am going to bed at 10 pm"
Run Code Online (Sandbox Code Playgroud)
我怎样才能在我的 ruby 项目中做到这一点?有实现的 gemString#magic_embed_function吗?
有一种特殊类型的插值使用String#%方法。这允许您将序数 ( Array ) 和非序数 ( Hash ) 输入插入到类似于Kernel#sprintf提供的格式字符串中。但是,通过此方法使用哈希参数可以支持格式字符串中的命名变量。作为一个极简主义的例子:
"%{foo} %{bar}" % {foo: 'baz', bar: 'quux'}
#=> "baz quux"
Run Code Online (Sandbox Code Playgroud)
使用散列参数,格式字符串占位符被视为散列键,由散列中的关联值替换。这使得传入的变量的顺序变得不重要。根据您原始帖子中的代码,您可以按如下方式使用它:
template_str = 'I am going to %{place} at %{time}.'
template_str % {time: '10:00 PM', place: 'bed'}
#=> "I am going to bed at 10:00 PM."
Run Code Online (Sandbox Code Playgroud)
当您想要传递数组或散列进行插值时,这是一种有用的技术,但在一般情况下可能会或可能不会提供优于其他类型插值的优势。你的旅费可能会改变。