我正在寻找一种更优雅的方式来连接Ruby中的字符串.
我有以下几行:
source = "#{ROOT_DIR}/" << project << "/App.config"
Run Code Online (Sandbox Code Playgroud)
这样做有更好的方法吗?
就此而言,<<和之间的区别是+什么?
>> string = '#{var}'
=> "\#{var}"
>> proc = Proc.new { |var| string }
=> #<Proc:0xb717a8c4@(pry):6>
>> proc.call(123)
=> "\#{var}"
Run Code Online (Sandbox Code Playgroud)
不是我想要的.双引号string导致显而易见的结果undefined local variable.
我最近一直使用Ruby进行编码,并且来自Python,据我所知,单引号和双引号对代码的工作方式没有任何影响.
我转到Ruby看看它是如何工作的,并调查Ruby和Python之间的相似之处.
我曾使用单引号字符串并注意到这一点:
hello = 'hello'
x = '#{hello} world!'
puts x
Run Code Online (Sandbox Code Playgroud)
它返回'#{hello} world!'而不是'hello world!'.
注意到这一点后,我尝试了双引号,问题得到解决.现在我不确定为什么会这样.
单引号和双引号会改变这个还是因为我的编辑器(Sublime text 3)?如果它在以前的版本中工作方式不同,我也使用Ruby 2.0版.
我正在ruby-lang.org上做Ruby 20分钟的教程,我发现这个代码搞乱了irb:
irb(main):015:0> def h(name)
irb(main):016:1> puts "Hello #{name}!"
irb(main):017:1> end
Run Code Online (Sandbox Code Playgroud)
根据解释,该#{name}部分只是将变量添加到字符串?我认为这是一种奇怪而冗长的编写方式所以我只是想我会尝试"Hello" + name并且它的工作方式完全相同..
我在谷歌周围试图找到一个意义#{},我找不到任何谈论它,所以我想我会问社区..有什么区别?有吗?
提前致谢!
如以下代码来自"为什么的尖锐指南":
def wipe_mutterings_from( sentence )
unless sentence.respond_to? :include?
raise ArgumentError, "cannot wipe mutterings from a #{ sentence.class }"
end
while sentence.include? '('
open = sentence.index( '(' )
close = sentence.index( ')', open )
sentence[open..close] = '' if close
end
end
Run Code Online (Sandbox Code Playgroud) 使用时返回一个数组.map:
<li class="mix <%= p.sectors.map {|s| "#{s.name}"} %> all">
Run Code Online (Sandbox Code Playgroud)
给出数组:
["Content Management System", "Web Design", "Web Development"]
Run Code Online (Sandbox Code Playgroud)
目前我认为返回的结果是:
<li class="mix ["Content Management System", "Web Design", "Web Development"] all mix_all" </li>
Run Code Online (Sandbox Code Playgroud)
我想使用每个 s.name 作为类名,但使用时遇到问题:
<li class="mix <%= p.sectors.map {|s| "#{s.name}"}.join(" ") %> all">
Run Code Online (Sandbox Code Playgroud)
其中每个单词都被视为一个单独的类,因此网页设计现在是两个类而不是一个类。
有没有办法将网页设计作为一个类,或者我是否需要使用不同的命名约定(例如网页设计)才能完成这项工作?