我可以做点什么
initialValue = 0x42
width = 113
someBytes = bytes([initialValue] * width)
Run Code Online (Sandbox Code Playgroud)
这浪费时间创建一个中间列表,只是为了扔掉它.
要么
someBytes = bytearray(width)
for n in range(width):
someBytes[n] = initialValue
Run Code Online (Sandbox Code Playgroud)
但是这是非常不起作用的,并且以零的初始值开始,这将立即被替换,并且我需要使用bytearray来使分配工作.
是否有更多python /简单/简洁的方法来实现这一目标?
(python3顺便说一句)
跟进:
我最终使用了这种bytes([initialValue]) * width
方法.我认为唯一"不太明显"的是需要使用一个短期状态的常规列表来创建一个具有初始值的字节数组,但这与宽度分配无关,并且与其他一些一致python集合.
我确实做了一些有趣的时机.可以预期,拉伸的字节比从拉伸列表创建的字节更快.
>>> timeit("bytes([initial]) * width",
... "width = 256; initial = 0x42", number=100000)
0.11861954815685749
Run Code Online (Sandbox Code Playgroud)
VS
>>> timeit("bytes([initial] * width)",
... "width = 256; initial = 0x42", number=100000)
0.5535310138948262
Run Code Online (Sandbox Code Playgroud)
随着大小的width
增加,差异变得越来越明显.我尝试的另一种有趣的方法是使用理解来创造.我很惊讶这是多么缓慢:
>>> timeit("bytes(initial for _ in range(width))",
... "width = 256; initial = 0x42", number=100000)
2.3924577180296183 …
Run Code Online (Sandbox Code Playgroud) 给出以下游乐场片段
let list = [4.2, 1.3, 7.8]
let list1 = list.sorted() { $0 < $1 }
let list2 = sorted(list)
let list3 = sorted(list) { $0 < $1}
Run Code Online (Sandbox Code Playgroud)
我可以使用两种形式的自由函数sorted
,有或没有闭包.但是Array.sorted()方法没有这样的机会.有没有理由不这样做?苹果公司不能宣布这样吗?
func sorted(isOrderedBefore: (<T>, <t>) -> Bool = { $0 < $1 }) { ...
Run Code Online (Sandbox Code Playgroud)
(作为一个附带问题,为什么操场显示(3 times)
在右侧,而不是结果列表list1
和list3
?)
我知道这个问题已经被要求了ObjectiveC
,但我Swift
还没有足够强大的音译char *bytes
.
所以给定
let string = "600DBEEF"
Run Code Online (Sandbox Code Playgroud)
如何创建NSData
代表这4个字节的数字:60 0D BE EF
?
我目前收到的 Int 可能介于 0 和 180,000 之间。我需要改变它以适应 0 到 3000。我知道在其他语言中你可以使用类似的东西
Map(min1,max1,min2,max2,input)
Run Code Online (Sandbox Code Playgroud)
我似乎无法在 swift 中找到类似的东西。这是我目前拥有的,但它总是返回 0。
var newY = [(Int)(input)]
newY = newY.map {_ in 0 * 3000}
print(newY[0])
Run Code Online (Sandbox Code Playgroud)
我想我使用了错误的功能。我以前从未在 Swift 中做过任何映射。
我的SAMD21 ARM M0 +有一个"默认"resetVectors.c文件.它有一些看起来像:
__attribute__ ((section(".vectors")))
const DeviceVectors exception_table = {
...
};
Run Code Online (Sandbox Code Playgroud)
在其中定义不同的处理程序存根的位置.出于测试目的,我想使用其中一个未使用的外设IRQ.
默认情况下,未使用的设置为NULL地址.我已向自己证明我可以修改该文件,并在编译时更改我未使用的IRQ(21)以触发处理程序.但是,是否可以在编译时间之外完成此操作?
我观察到该表似乎是基于偏移0.所以我尝试了这个:
DeviceVectors *table = 0x0000000;
table->pvReserved21 = PV21Handler;
Run Code Online (Sandbox Code Playgroud)
但这只是挂板.是否有动态方式在运行时分配处理程序?
我使用了许多类似json的词组.pprint
构建它们很方便.有没有办法使pprint输出中的所有整数以十六进制而不是十进制打印?
例如,而不是:
{66: 'far',
99: 'Bottles of the beer on the wall',
'12': 4277009102,
'boo': 21,
'pprint': [16, 32, 48, 64, 80, 96, 112, 128]}
Run Code Online (Sandbox Code Playgroud)
我宁愿看到:
{0x42: 'far',
0x63: 'Bottles of the beer on the wall',
'12': 0xFEEDFACE,
'boo': 0x15,
'pprint': [0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80]}
Run Code Online (Sandbox Code Playgroud)
我已经尝试过定制PrettyPrinter
,但无济于事,我能够导致上述情况,PrettyPrinter.format()
处理整数似乎只适用于某些整数:
class MyPrettyPrinter(PrettyPrinter):
def format(self, object, context, maxlevels, level):
if isinstance(object, int):
return '0x{:X}'.format(object), True, False
return super().format(object, context, maxlevels, level)
Run Code Online (Sandbox Code Playgroud)
以上课程产生
{0x42: 'far',
0x63: …
Run Code Online (Sandbox Code Playgroud) 我有一个简单的Kotlin类:
data class ValveSpan(val begin:Duration, val end:Duration, val key:String):Comparable<ValveSpan> {
...
}
Run Code Online (Sandbox Code Playgroud)
因为它是一个数据类,所以我必须有一个主构造函数,其中包含一个或多个值.这很好,我喜欢它的简洁表达.
但是当我想创建一个辅助构造函数来填充doc之类的对象(类似于JSON)时,它会变得奇怪:
constructor(doc:TSON):this(doc["begin"].duration!!, doc["end"].duration!!, doc["valves"].sequence!!.first()!!.string!!) {
// do nothing here, because, uh, I had to do it all in the delegated primary????
}
Run Code Online (Sandbox Code Playgroud)
基本上,次级构造的意图,是取输入,计算一些值作为主要的构造,然后调用与这些值的初级.但似乎我必须在主构造函数中内联它们.随着派生变得越来越复杂,越来越复杂.我真的很想写下这样的东西:
constructor(doc:TSON) {
var sanitizedBegin = doc["begin"].duration ?: 0.minutes
var sanitizedEnd = doc["end"].duration ?: 0.minutes
var sanitizedKey = doc["valves"].sequence?.firstOrNull()?.string ?: ""
primaryConstructor(sanitizedBegin, sanitizedEnd, sanitizedKey)
}
Run Code Online (Sandbox Code Playgroud)
有没有办法委托给主构造函数,而不必进行内联的所有桥接计算?
我正在尝试组合一个看起来像 iOS 就地表格编辑的效果。当处于“编辑模式”时,选择控件滑入每行的一侧。我在选择按钮上使用简单的 AnimatedVisibility 并调整进入/退出参数来完成此操作。按钮本身看起来不错,但我行中的其他元素也没有为它们的位置设置动画。他们只是在最后突然更新?当我进入和退出“编辑模式”时,我应该如何获得“选择按钮滑入并且其他小部件聚集一点以腾出空间”效果?
我当前用于行的代码如下所示:
Row(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 10.dp),
verticalAlignment = Alignment.CenterVertically
) {
Icon( ... )
Spacer(modifier = Modifier.width(4.dp))
Text(text = keyInfo.name, modifier = Modifier.weight(1.0f), maxLines = 1)
Spacer(modifier = Modifier.width(10.dp))
SettingsLabel(text = keyInfo.created.shortPrinted())
AnimatedVisibility(visible = allowSelection,
enter = slideInHorizontally(initialOffsetX = { w -> w }),
exit = slideOutHorizontally(targetOffsetX = { w -> w })
) {
IconButton(
onClick = onSelectionClick, modifier = Modifier
.padding(start = 16.dp)
.size(28.dp)
) {
when (isSelected) {
true …
Run Code Online (Sandbox Code Playgroud) 以下方法:
- (NSMutableArray*) timeSortedBegins {
NSMutableArray* begins = [self.spans valueForKey: @"begin"];
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey: @"cycleOffsetObject" ascending: YES];
[begins sortUsingDescriptors: @[sort]];
return begins;
}
Run Code Online (Sandbox Code Playgroud)
抛出此运行时异常:
2014-03-21 14:41:32.482 myValve[1741:60b] -[__NSArrayI sortUsingDescriptors:]: unrecognized selector sent to instance 0x16d7bc20
2014-03-21 14:41:32.484 myValve[1741:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI sortUsingDescriptors:]: unrecognized selector sent to instance 0x16d7bc20'
Run Code Online (Sandbox Code Playgroud)
我已经使用断点来说服自己begins
数组确实已经满了(在这种情况下为两个)WEAnchor*对象.该对象实现了以下两种方法:
- (NSTimeInterval) cycleOffset {
return self.offset + (self.datum ? self.datum.cycleOffset : 0.0);
}
- (NSNumber*) cycleOffsetObject {
return [NSNumber …
Run Code Online (Sandbox Code Playgroud) 美好的一天!我明天有报告,我正在审查Smalltalk.我试图使用该raisedTo:
方法,但它给了我这个错误:
MessageNotUnderstood: Character>>raisedTo:
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
|x y z|
x := UIManager default request: 'P1: '.
y := UIManager default request: 'P2: '.
z := x raisedTo: y.
self inform: z.
Run Code Online (Sandbox Code Playgroud) 想在Swift3中添加一些糖玩具.基本上,我希望能够做到这样的事情:
let randomAdjust = (-10...10).random
Run Code Online (Sandbox Code Playgroud)
为此,我决定扩展ClosedRange
.但后来发现它对我的情况可能会更好,我真的只是计划在现在做Int,使用CountableClosedRange
.我最近的多次尝试看起来像:
extension CountableClosedRange where Bound == Int {
var random:Int {
return Int(arc4random_uniform(UInt32(self.count) + 1)) + self.lowerBound
}
}
Run Code Online (Sandbox Code Playgroud)
但游乐场抱怨说:
error: same-type requirement makes generic parameter 'Bound' non-generic
extension CountableClosedRange where Bound == Int {
Run Code Online (Sandbox Code Playgroud)
我甚至都不知道它在那里告诉我什么.
我一直在 Swift 和 Kotlin 之间来回移植代码。受到这个答案的启发,我一直在使用Swift?.let { } ?: run {}
来替代我使用的许多地方。if let ... { } else {}
不过,我真的很喜欢 Kotlin 表达式。在我看来,它比关键字特定的if let
混合物更通用。因此,为了平等起见——或者至少为了通过尝试愚蠢的实验来学习——我想我应该尝试let
在 Swift 中实现这个构造。
因为let
是 Swift 中的关键字,所以我立即发现我需要添加反引号,或者使用不同的名称,例如cull
. 这导致了这个无法编译的代码:
extension Any {
func cull<R>(block:(Self) -> R) -> R {
return block(self)
}
}
Run Code Online (Sandbox Code Playgroud)
考虑到我的学徒水平,可能存在很多问题。但最重要的是,我被告知我无法扩展 Any(此处有更详细的解释)。
所以Any不能被扩展。我可以使用任何其他语言构造来实现它,以便我可以实现类似 Kotlin 的东西吗let
?基本上:
<expression>.foo { <expressionResult> in ... }
Run Code Online (Sandbox Code Playgroud)
作为一个奖励/旁白问题,我认为即使有一种方法(我确实希望有这样我可以学习),它也不会相同,因为 Kotlin 可以用于控制流,因为我可以做来自 Kotlin 的非本地返回,但不是来自 Swift 闭包。这也正确吗?
澄清
let
基本上,我可以为指定类型实现 …