2015-05-26 51 views
0

所以我有一个名为borrowed_book_bitmask的字符串,我想用左边和右边的另一个字符串填充此字符串。填充在某些类中被定义为常量。所以我有有没有更好的方法来填充Ruby中的字符串?

borrowed_book_bitmask = Module1::Model1::BITMASK_PADDING + borrowed_book_bitmask + Module1::Model1::BITMASK_PADDING 

这个语法有点笨重和不雅。有更好,更简洁的方式来表达上述内容吗?

假设我无法更改变量名称和常量名称。

+1

在这里,我觉得笨重是最好的。为了清楚起见,你可以写:'pad = Module1 :: Model1 :: BITMASK_PADDING',然后'pad + borrowed_book_bitmask + pad',''#{pad}#{borrowed_book_bitmask}#{pad}“'或'pad.concat borrowed_book_bitmask).concat(垫)'。 –

回答

0

可以使用center method

a = "abc" 
"abc.center(a.size + 4 * 2) 
=> " abc " 
+1

基本上你是填充4个空格的字符串?在我的情况下,填充是另一个字符串,不一定是全部的空格。假设我的填充是“foo”,那么如何使用中心填充“foo”的字符串?谢谢。 –

+0

@ZackXu顺便说一句,'center'接受第二个参数,一个字符串来填充。 'borrowed_book_bitmask.center(borrowed_book_bitmask.length + 2 * Module1 :: Model1 :: BITMASK_PADDING.length,Module1 :: Model1 :: BITMASK_PADDING)'会起作用。 – mudasobwa

0
borrowed_book_bitmask.gsub! /\A|\z/, Module1::Model1::BITMASK_PADDING 
+0

不错。我从来没有想过在锚上使用'gsub'。 –

+0

如何:borrowed_book_bitmask.gsub!/^ | $ /,Module1 :: Model1 :: BITMASK_PADDING –

+0

@ZackXu无论您希望它在包含'\ n'的字符串上失败,都可以使用'/^| $ /'自由发挥。 – mudasobwa

1

你所说的 “垫” 是什么意思?总是在每边添加相同的字符串?

"#{Module1::Model1::BITMASK_PADDING}#{borrowed_book_bitmask}#{Module1::Model1::BITMASK_PADDING"} 

你是什么意思的“优雅”?插值比连接更加优雅(更高性能的IIRC,我可能不会)。如果borrowed_book_bitmask是一种方法,那么您可以将其嵌入到方法中,或使用装饰器来封装功能。

+0

“垫”我的意思是在两端连接。我所说的“优雅”意思是更短,更清晰。在我看来,在这种情况下,串联风格更清晰(当我只需要使用+时,您正在使用#{})。也许我的语法不能进一步改进,但只是想知道是否有更好的方法。谢谢。 –

+0

@ZackXu只需内插或连接。这是一清二楚。我可能会将这个常量放到一个较短的局部变量中,以便易读,但很可能我会将这个功能转换为一个命名方法,并在我的余生中忽略它。国际海事组织你过度思考一个微不足道的实施。 –

+0

“优雅”应该总是包含DRY原则。我怀疑使用非常长的变量名称的解决方案,在同一行上重复两次可能会被认为是优雅的。 – mudasobwa

1

在我看来,不雅是来自重复的模块参数;我一直在视觉上解析两个长期术语来检查它们是否相同。

pad = Module1::Model1::BITMASK_PADDING 
borrowed_book_bitmask = pad + borrowed_book_bitmask + pad 

......太明显了?也许这只对我更优雅。

相关问题