标签: idioms

Python 中的一行布尔检查

我是一名相对较新的 Python 开发人员,但我有 Java 背景。在 Java 中,有一行布尔检查器/分配器(由于缺乏更好的术语):

int result = (x)?y:z;
Run Code Online (Sandbox Code Playgroud)

我试图在Python中使用类似的方法,但我不确定这个结构是否存在。有没有一种方法可以声明一个变量,检查条件是否为真并将其分配给两个值之一而不使用 if/else?

python boolean idioms ternary-operator

0
推荐指数
1
解决办法
4433
查看次数

用于在任意翻译单元中的 main 之前执行任意代码的 C++ 成语

我有一个带有我的main()函数的翻译单元和另一个没有 main 的翻译单元。假设即使我只控制第二个而无法触摸第一个。

现在,由于我不会讨论的原因,我希望能够在运行之前运行一些代码main()。我知道这可以通过使用函数调用初始化全局变量来完成,但我想隐藏这一点 - 尽可能少地使用宏(我敢说不使用宏吗?可能不可能,C++ 中没有适当的静态块)

什么是优雅的,或者我们可以说,不是很丑的做这件事的方式?更清楚地说,我正在寻找可以多次使用此功能的东西,而不仅仅是让它工作一次的东西。我希望它尽可能接近:

// ... at global scope ...
static {
    // my code here
}
Run Code Online (Sandbox Code Playgroud)

PS:这个问题与这个关于初始化静态类成员的问题有关,但不一样。它还希望清楚地反驳这个声明,它不能在 C++ 中完成

注意:是的,我知道静态初始化顺序失败,不需要提醒我……而且我不是要求绕过它的东西。显然,静态运行代码需要一些谨慎。

c++ idioms static-block

0
推荐指数
1
解决办法
620
查看次数

如何在结果上运行函数或默认为值?

我们希望在 a 上运行一个函数,Result或者如果结果实际上是一个错误,则有一个默认值。就像是:

let is_dir = entry.file_type().is_dir() || false
//                 ^--- file_type() returns a Result
//                                         ^--- default to false if Result is an IOError
Run Code Online (Sandbox Code Playgroud)

目前,我们正在这样做:

let is_dir = entry.file_type().map(|t| t.is_dir()).unwrap_or(false);
Run Code Online (Sandbox Code Playgroud)

但这似乎非常令人困惑,对map单个项目结果运行 a 。有更好的方法吗?

idioms rust map-function

0
推荐指数
1
解决办法
93
查看次数

return nil, nil 不是惯用的 go 吗?

如果我们在 GO 中有以下方法:

GetCustomer(id string) (*Customer, error)
Run Code Online (Sandbox Code Playgroud)

数据库中可能不存在给定 ID 的客户。当没有找到客户时,代码可以

return nil, nil
Run Code Online (Sandbox Code Playgroud)

这在 Go 中被认为是糟糕的编码实践吗?或者惯用的 Go 代码看起来像

 return nil, errCustomerNotFound
Run Code Online (Sandbox Code Playgroud)

我在第二种方法中看到的问题是您最终会检查此特定错误并单独处理它。

Go 源代码或库中是否有出现这种情况并且首选其中一种方法的示例?

更新

如果return nil, nil被认为是不惯用的。我想知道为什么在这种情况下这是真的?由于 *Customer 是一个指针,我想返回 nil 来表示没有值

error-handling idioms go

0
推荐指数
1
解决办法
331
查看次数

将项目添加到地图中的列表的 Kotlin 惯用方法

我有一个MutableMap<String, MutableList<String>我正在向其中添加项目,基本上是一个集合,其中相同的键与多个值相关联。

每当我想添加一个新值时,我需要首先检查是否已经有一个与同一个键关联的列表,如果没有则初始化一个,然后将该值添加到列表中。

我可以通过这样做以非常冗长的方式做到这一点

if (map.containsKey(key)) {
    map[key].add(value)
} else {
    map[key] = mutableListOf(value)
}
Run Code Online (Sandbox Code Playgroud)

我也可以通过这样做以非常简洁的方式做到这一点

map[key] = (map[key] ?: mutableListOf()) + mutableListOf(value)).toMutableList()
Run Code Online (Sandbox Code Playgroud)

以及介于冗长与简洁之间的其他几种方式。

但是,在 Kotlin 中执行此操作的惯用方法是什么?

我并不是真正的目标是简洁,而是要立即识别和理解的形式。

collections idioms kotlin

0
推荐指数
1
解决办法
169
查看次数

在测试范围时,是否有更多的 C# 9 / .NET 5 惯用方式来表达 If/Else?(模式匹配或更新的 C# 功能)

今天只需要为一个非常接近此的项目编写一些代码:

private static string CreateColorFromPercentage(double percentage, bool isPrimaryGroup)
{
    if (isPrimaryGroup)
    {
        if (percentage >= 97.0)
        {
            return "#000000"; // black
        }
        else if (percentage > 80.0)
        {
            return "#FF0000"; // red
        }
        else
        {
            return "#FFA500"; // orange
        }
    }
    else
    {
        if (percentage > 97.5)
        {
            return "#000000"; // black
        }
        else if (percentage > 80.0)
        {
            return "#FFA500"; // orange
        }
        else
        {
            return "#008000"; // green
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在测试范围时,是否有更多的 C# 9 / .NET 5 惯用方式来表达 …

c# idioms readability pattern-matching .net-5

0
推荐指数
1
解决办法
86
查看次数

惯用的字符串分组(计算连续重复的字符)

怎样用什么成语才能达到预期的效果呢?

val input = "aaaabbbcca"

val result = input.(here do the transformations)

val output = listOf("a" to 4, "b" to 3, "c" to 2, "a" to 1)

assert(result == output)
Run Code Online (Sandbox Code Playgroud)

idioms kotlin

0
推荐指数
1
解决办法
417
查看次数

为什么传递可变参数的速度如此之慢?

package main

import (
    "fmt"
    "time"
)

func main() {

    n := 1024
    dst1 := make([]byte, n)
    dst2 := make([]byte, 0, n)
    dst3 := make([]byte, 0, n)

    start := time.Now()
    for i := 0; i < n; i++ {
        dst1[i] = byte(i)
    }
    fmt.Println(uint64(time.Since(start).Microseconds()))

    start = time.Now()
    for i := 0; i < n; i++ {
        dst2 = append(dst2, dst1[i])
    }
    fmt.Println(uint64(time.Since(start).Microseconds()))

    start = time.Now()
    for i := 0; i < n; i++ {
        dst3 = append(dst3, dst1...)
    }
    fmt.Println(uint64(time.Since(start).Microseconds())) …
Run Code Online (Sandbox Code Playgroud)

performance idioms parameter-passing variadic-functions go

-2
推荐指数
1
解决办法
114
查看次数

C++ 11是否引入了任何新的方法来打破嵌套的for循环?

考虑的情况下进行的其他内部

int f( ... )
{
  for (int i = start_a; i < end_a; i++)
  {
    for (int j = start_b; j < end_b; j++)
    {
      // make some computation
      if( i_must_exit == true)
      {
        // exit from all for
      }
    }
  }

  // I want arrive here
}
Run Code Online (Sandbox Code Playgroud)

我们想要摆脱两个for循环.在没有分解内部函数,抛出异常等的情况下,这在C++ 03中并不容易.我想知道C++ 11是否引入了一种机制来执行此操作.

c++ idioms c++11

-3
推荐指数
1
解决办法
623
查看次数