Ruby中是否有允许字符串插值但不将反斜杠解释为转义字符的单行字符串文字语法?即,哪里ruby_var="foo"我希望能够键入C:\some\windows\path\#{ruby_var}\path的等效项,得到字符串C:\some\windows\path\foo\path而不必转义反斜杠或求助于多行heredoc。puts"C:\some\windows\path\#{ruby_var}\path"puts"C:\some\windows\path\path_#{ruby_var}\path"=>C:omewindowspath#{ruby_var}path=>C:omewin
如果我有如下变量,i=1k1=20有什么方法可以通过i的插值得到k1的值吗?有点像,k"#{i}"=>20提前致谢。 最佳答案 这取决于它是否是localvariable或method.send"k#{i}"应该用方法来解决这个问题:classFooattr_accessor:i,:k1defgetsend"k#{i}"endendfoo=Foo.newfoo.i=1foo.k1="one"foo.get#=>"one"如果确实需要,您可以使用当前的Binding访问局部变量和local_variable_get:i=1k1="on
在我的代码中,我想对我生成的电子邮件主题使用字符串插值。output="thisismy%{title}"%{title:"Texthere"}这按预期工作,但是有没有办法在哈希内部使用哈希并且仍然能够使用字符串插值?如果我能做这样的事情就太棒了:output="thisismy%{title.text}"%{title:{text:"texthere"}} 最佳答案 在Ruby2.3中,sprintf检查散列的默认值,因此您可以提供default_proc至dig向上嵌套值:hash={title:{text:"texthere"
我有一个包含一些内插语句的字符串,比如description='Hello!我是#{self.name}'。该字符串按原样存储在数据库中;所以没有应用自动字符串插值。我想在以后应用此插值。我可以做一些疯狂的事情,比如eval("\"+description+\"")但必须有更好、更像ruby的方式来做到这一点,对吧? 最佳答案 使用%运算符:'databasestorestringsays:%{param}'%{param:'noice'}#=>"databasestorestringsays:noice"
当在双引号字符串插值中引用对象时,to_s和to_str似乎都不会被调用。例如:#UPDATE:Thisexampleactuallyworksasexpected.Seeupdatebelow.classFoodefto_s'foo'enddefto_strto_sendend"#{Foo.new}"#result:"#"我不认为我可以做些什么来使返回值“foo”?更新抱歉,这段代码确实有效。另一段代码错误。 最佳答案 您使用哪个版本的Ruby看到这些结果?这适用于Ruby1.9.2和1.8.6:classFoodefto_s'h
是否可以将字符串传递给ruby中的方法并让该方法插入该字符串?我有这样的想法:do_a_search("location=#{location}")...defdo_a_search(search_string)location=....#getthisfromanothersourceModel.where(search_string)end上下文是RoR,但我认为这是一个一般的ruby问题。我意识到上面的例子看起来有点复杂,但我正在尝试重构一堆非常重复的方法。问题是,如果我将要插值的字符串放在双引号中,调用方法时位置不存在,如果我将它放在单引号中,它永远不会被插值...我真
在python中我可以做到_str="Mynameis{}"..._str=_str.format("Name")当我尝试在ruby中_str="Mynameis#{name}"解释器提示变量name未定义,所以它期待_str="Mynameis#{name}"=>{name=:"Name"}我怎样才能在ruby中有一个字符串占位符供以后使用? 最佳答案 您可以使用延迟插值。str="Mynameis%{name}"#=>"Mynameis%{name}"putsstr%{name:"Sam"}#=>"MynameisSam
最近我从Ruby1.9.3转向了Ruby2.0.0。在1.9.3中我们习惯于使用:'http://#{get_host_name}.com来进行字符串插值,但是自从迁移到2.0.0之后,好像就不行了。谁能告诉我语法是否改变了?如何在Ruby2.0.0中执行字符串插值? 最佳答案 无论您使用哪个版本的Ruby,单引号字符串中都不会发生字符串插值。使用双引号字符串或%Q样式的字符串。 关于ruby-Ruby中的字符串插值不起作用?,我们在StackOverflow上找到一个类似的问题:
我有一个如下所示的属性:data-text="Iwon###byplaying..."###应该是我在@credits中的值。我应该如何把它放在那里?我在尝试做的时候遇到了同样的麻烦:data-url=+"//"+在这种情况下,我不知道如何放置应该围绕整个方案+端口的“”。谢谢 最佳答案 data-text="Iwon#{@credits}byplaying..."您可以对其他字符串应用相同的原则,如下所示:data-url="#{request.scheme}//#{request.port}"
我是一个正在学习一些Ruby教程的新手,并且对下面的send方法的使用感到困惑。我可以看到send方法正在读取属性迭代器的值,但Ruby文档指出send方法采用一个以冒号为前缀的方法。所以,我的困惑在于下面的发送方法如何插入被迭代的属性变量。moduleFormatAttributesdefformats(*attributes)@format_attribute=attributesenddefformat_attributes@format_attributesendendmoduleFormatterdefdisplayself.class.format_attributes.e