面试题答案
一键面试hash = {name: 'John', age: 30, scores: [85, 90, 78]}
average_score = hash[:scores].sum / hash[:scores].size.to_f
report = "Name: #{hash[:name]}, Age: #{hash[:age]}. Scores: #{hash[:scores].join(', ')}. Average Score: %.2f" % average_score
puts report
性能方面
- 字符串插值:在Ruby中,字符串插值是在运行时构建字符串。对于大规模数据或频繁调用的场景,每次插值都会创建新的字符串对象,性能开销较大。因为每次插值都需要解析字符串中的占位符,并将变量值替换进去,这涉及到内存分配和字符串拼接操作。
- 格式化输出:格式化输出(如使用
%
运算符)性能相对较好。格式化字符串在编译时就确定了结构,运行时只需将变量值按格式要求填入,减少了动态解析的开销。特别是在频繁调用的场景下,格式化输出不需要每次都重新解析占位符,所以性能更优。
代码可读性方面
- 字符串插值:代码可读性较高。它的语法简洁直观,直接将变量嵌入字符串中,使代码看起来更自然,容易理解字符串的构建逻辑。例如
"Name: #{hash[:name]}"
,一眼就能看出是将hash
中name
的值插入到字符串中。 - 格式化输出:代码可读性相对较差。格式化字符串使用特定的占位符(如
%s
、%d
等),对于不熟悉这种语法的开发者来说,理解起来可能需要一定的学习成本。例如"Name: %s" % hash[:name]
,需要了解%s
代表字符串占位符才能明白其含义。
可维护性方面
- 字符串插值:在可维护性上有优势。由于其语法简洁直观,如果需要修改嵌入的变量或字符串结构,直接在字符串中进行修改即可,代码的变动范围较小。例如,如果要在字符串中添加新的变量,只需在字符串中插入新的插值表达式。
- 格式化输出:可维护性相对较弱。因为格式化字符串的占位符与变量是分离的,当需要修改变量或字符串结构时,可能需要同时在格式化字符串和变量传递部分进行修改,增加了出错的可能性。例如,如果要在格式化字符串中添加新的占位符,不仅要修改格式化字符串,还要确保相应的变量正确传递。