我正在研究一个做一些字符串操作的Vimscript.我想知道是否有办法通过将另一个字符串乘以某个倍数来生成字符串.例如,'a' * 5会产生5 a : 'aaaaa'. 到现在为止,我一直在做这样的while循环:
let l:char = 'a'
let l:x = 5
let l:i = 0
let l:somestr = ""
while l:i < l:x
let l:somestr .= l:char
let l:i += 1
endwhile
Run Code Online (Sandbox Code Playgroud)
对于我正在做的事情,这似乎非常冗长.有什么方法可以让它更紧凑?
我有一个 Django 应用程序,它有许多不同的模型,所有模型都有一堆通用数据。最终,我认为这个问题归结为继承和组合之间的决定。我当前的实现是这样的:
\n\nclass Thing(models.Model):\n foo = models.FooField()\n bar = models.BarField()\n type = models.CharField()\n\nclass A(CommonStuff):\n aFoo = models.FooField()\n\nclass B(CommonStuff):\n bFoo = models.FooField()\nRun Code Online (Sandbox Code Playgroud)\n\n通过这个模型,我可以查询Thing使用事物模型的管理器。使用 上的 type 字段Thing,我可以通过查看type包含 'a' 或 'b' 的字段,然后询问 (ie) 来获取子对象数据thing.a.aFoo。这是我喜欢的一个功能,因为获取所有Thing对象的列表是我的应用程序中相当常见的操作。
我在这里看到几个问题。首先,这个type领域似乎没有必要。有没有办法无需先查找类型即可获取子数据?似乎我可以使用一个实例方法来解决这个问题,该方法根据给定的类型值返回正确的对象,或者如果我真的想摆脱类型字段,我可以迭代 上的每个反向关系字段,寻找Thing一个这不会引发DoesNotExist异常。但这对我来说感觉很脆弱。如果我添加一个新的 'subthing' C,我必须更新Thing以查找新类型。我可以通过制作Thing和抽象模型来解决这个问题。这样,A就B可以获取 的所有字段Thing,并且避免使用该type字段。但问题是我失去了对所有Thing对象执行查询的能力。
我正在考虑的另一种模型通过将数据转换为和Thing上的字段来翻转这个模型。AB
class Thing(models.Model):\n …Run Code Online (Sandbox Code Playgroud)