1,双引号和单引号
当字符串使用双引号的时候,可以编写二进制码到字符串中。
puts "This string\ncontains a newline"
# This string
# contains a newline
单引号输出如下
puts 'This string\ncontains a newline'
#This string\ncontains a newline
当使用单引号时,仅有的特殊代码是,你可以使用 "\'" 生成一个单引号,"\\"生成一个 "\"
puts 'it may look like this string contains a newline\nbut it doesn\'t'
# it may look like this string contains a newline\nbut it doesn't
puts 'Here is a backslash: \\'
# Here is a backslash: \
2, 方法后面的符号—— ! 和 ?
string.upcase
string
# => "MY FIRST STRING"
# => "My first string"
string.upcase!
string
# => "MY FIRST STRING"
# => "MY FIRST STRING"
"危险"的方法,会修改对象本身的方法,通常后面会有一个感叹号: upcase! 方法修改了string本身,而upcase没有。
另一种惯例句法是,谓词后面有一个问号,
string.empty? # => false
string.include? 'MY' # => true
3,遍历hash
hash = { "key1" => "val1", "key2" => "val2" }
string = ""
hash.each { |k,v| string << "#{k} is #{v}\n" }
puts string
# key1 is val1
# key2 is val2
更有效率的做法是:
string = ""
hash.each { |k,v| string << k << " is " << v << "\n" }
在Ruby中,string就像array一样,可以根据需要扩展而无需消耗太多的内存和时间。
a,经可能的使用诸如 string << k << " is " << v << "\n"的方式去构造字符串,这样效率更高些;
b,你不应该改变一个不属于你声明的字符串;
c,Array#join必须加一个分隔符作为参数,来隔离数组中相邻元素,join方法不会在末尾也加一个分隔符
区别:
data = ['1', '2', '3']
s = ''
data.each { |x| s << x << ' and a '}
s
data.join(' and a ')
# => "1 and a 2 and a 3 and a "
# => "1 and a 2 and a 3"