我是ruby的新手,这可能是一个显而易见的问题,但我真的不知道在Google上搜索什么才能真正找到我正在寻找的东西。
我正在做算法问题(不太相关),它给了我一个方阵,并询问它是否具有圆对称性。我这样解决:
s = STDIN.readlines.map { |x| x.chomp }.join ''
puts %w[YES NO][s == s.reverse ? 0 : 1]
是否可以将所有内容放在一行中?我不能这样做的唯一原因是因为我认为我必须存储字符串然后明确比较它。它从STDIN中获取字符串,因此无法重新读取它。优雅的解决方案?谢谢!
答案 0 :(得分:2)
Object#tap
接受一个块,并将对象传递给该块。因此,应该能够将其重写为:
STDIN.readlines.map { |x| x.chomp }.join('').tap { |s| puts %w[YES NO][s == s.reverse ? 0 : 1] }
虽然我同意评论者的说法,这只会损害可读性。
答案 1 :(得分:0)
无论可读性如何,您几乎总是可以使用;
分隔符强行处理一行。
在你的情况下,因为s
被引用两次,你需要将它分配给一个变量。