我是Ruby的新手,并且在for循环中连接字符串时遇到了一些问题。
这是我到目前为止所拥有的
# search request
search = ["testOne", "testTwo"]
# Create base url for requests in loop
base_url = "http://example.com/"
# create an empty response array for loop below
response = []
search.each do |element|
response = "#{base_url}#{element}"
end
我希望回复[0]来保持“http://example.com/testOne”。但是,循环执行后,response [0]只保存我的基本变量的第一个字母(h);响应持有“http://example.com/testTwo”。
我认为这是一个简单的错误,但找不到任何有用的资源。
答案 0 :(得分:5)
使用Array#<<
方法
# search request
search = ["testOne", "testTwo"]
# Create base url for requests in loop
base_url = "http://example.com/"
# create an empty response array for loop below
response = []
search.each do |element|
response << "#{base_url}#{element}"
end
response # => ["http://example.com/testOne", "http://example.com/testTwo"]
response = "#{base_url}#{element}"
表示您在每次迭代中为局部变量 response
分配一个新的字符串对象。在最后一次迭代中,response
保存字符串对象"http://example.com/testTwo"
。现在response[0]
表示您正在调用方法String#[]
。因此,在字符串0
的索引 "http://example.com/testTwo"
中,出现的字符为h
,因此您的response[0]
返回'h'
- 这是根据您的代码预期。
相同的代码可以用更甜蜜的方式编写:
# search request
search = ["testOne", "testTwo"]
# Create base url for requests in loop
base_url = "http://example.com/"
response = search.map {|element| base_url+element }
response # => ["http://example.com/testOne", "http://example.com/testTwo"]
或
response = search.map(&base_url.method(:+))
response # => ["http://example.com/testOne", "http://example.com/testTwo"]
或者,正如 Michael Kohl 所指出的那样:
response = search.map { |s| "#{base_url}#{s}" }
response # => ["http://example.com/testOne", "http://example.com/testTwo"]