标签: named-parameters

值类引入了不需要的公共方法

看一下我的库的一些scala-docs,在我看来,值类中有一些不需要的噪音.例如:

implicit class RichInt(val i: Int) extends AnyVal {
  def squared = i * i
}
Run Code Online (Sandbox Code Playgroud)

这引入了不必要的符号i:

4.i   // arghh....
Run Code Online (Sandbox Code Playgroud)

那些东西出现在scala文档和IDE自动完成中,这实际上并不好.

那么......关于如何缓解这个问题的任何想法?我的意思是你可以使用,RichInt(val self: Int)但这不会让它变得更好(4.self,是吗?)


编辑:

在以下示例中,编译器是否擦除了中间对象?

import language.implicitConversions

object Definition {
  trait IntOps extends Any { def squared: Int }
  implicit private class IntOpsImpl(val i: Int) extends AnyVal with IntOps {
    def squared = i * i
  }
  implicit def IntOps(i: Int): IntOps = new IntOpsImpl(i)  // optimised or not?
}

object Application …
Run Code Online (Sandbox Code Playgroud)

visibility scala named-parameters value-class

15
推荐指数
2
解决办法
518
查看次数

在PHP中命名的函数参数

是否有可能在phppython有一个名为函数参数?一个示例用例是:

function foo($username = "", $password = "", $timeout = 10) {

}
Run Code Online (Sandbox Code Playgroud)

我想覆盖$timeout:

foo("", "", 3);
Run Code Online (Sandbox Code Playgroud)

丑陋.我宁愿这样做:

foo(timeout=3);
Run Code Online (Sandbox Code Playgroud)

php named-parameters

15
推荐指数
4
解决办法
4094
查看次数

确定是否传递了命名参数

我想知道是否可以确定是否在Python中传递了具有默认值的函数参数.例如,dict.pop是如何工作的?

>>> {}.pop('test')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'pop(): dictionary is empty'
>>> {}.pop('test',None)
>>> {}.pop('test',3)
3
>>> {}.pop('test',NotImplemented)
NotImplemented
Run Code Online (Sandbox Code Playgroud)

pop方法如何确定第一次没有传递默认返回值?这是否只能在C中完成?

谢谢

python default-value named-parameters

14
推荐指数
2
解决办法
1万
查看次数

python sqlite插入命名参数或null

我正在尝试使用命名参数将字典中的数据插入数据库.我有一个简单的SQL语句,例如

SQL = "INSERT INTO status (location, arrival, departure) VALUES (:location, :arrival,:departure)"
dict = {'location': 'somewhere', 'arrival': '1000', 'departure': '1001'}
c.execute(SQL,dict)
Run Code Online (Sandbox Code Playgroud)

在某处插入到位,1000到达到达列,1001到入境列.

我实际拥有的数据将包含位置,但可能包含到达或离开但可能不包含两者(在这种情况下,任何一个或NULL都不能进入表中).在这种情况下,我得到sqlite3.ProgrammingError:你没有提供绑定2的值.

我可以通过使用defaultdict解决这个问题:

c.execute(SQL,defaultdict(str,dict))
Run Code Online (Sandbox Code Playgroud)

为了使事情稍微复杂一些,我实际上会有一个包含多个位置的字典列表,其中包含到达或离开.

    ({'location': 'place1', 'departure': '1000'},
    {'location': 'palce2', 'arrival': '1010'},
    {'location': 'place2', 'departure': '1001'})
Run Code Online (Sandbox Code Playgroud)

我希望能够用c.executemany运行它,但我现在不能使用defaultdict.

我可以循环遍历列表中的每个字典并运行许多c.execute语句,但executemany似乎是一种更为简洁的方法.

为方便起见,我简化了这个示例,实际数据在字典中有更多条目,我从JSON文本文件构建它.

任何人对我如何做到这一点都有任何建议?

python sqlite named-parameters

14
推荐指数
1
解决办法
1万
查看次数

你如何在F#或任何函数式语言中讨论第二个(或第三个,第四个......)参数?

我刚刚开始使用F#,看看如何使用currying将第一个参数预加载到函数中.但是如何用第二,第三或其他任何参数来做呢?命名参数会使这更容易吗?是否有任何其他功能语言具有命名参数或其他方式使currying对参数顺序无动于衷?

f# functional-programming currying named-parameters

13
推荐指数
3
解决办法
2565
查看次数

命名参数和C#中的params关键字

我有一个C#方法,其中使用params关键字声明了一个可变长度参数列表:

public void VariableLengthParameterFunction (object firstParam, 
                                             params object[] secondParam)
Run Code Online (Sandbox Code Playgroud)

调用方法时有没有办法使用命名参数?

.net c# named-parameters

13
推荐指数
1
解决办法
5172
查看次数

如何使用地图列表在Spring中执行批量更新?

Spring的新手,我试图在List<Map<String, Object>>表中插入一个.到目前为止,我一直在使用SqlParameterSourcefor batch update,它在向它们提供java bean时工作正常.像这样的东西:

    @Autowired
    private NamedParameterJDBCTemplate v2_template;

    public int[] bulkInsertIntoSiteTable(List<SiteBean> list){
            SqlParameterSource[] batch = SqlParameterSourceUtils
                    .createBatch(list.toArray());
            int[] updateCounts = v2_template
                    .batchUpdate(
                            "insert into sitestatus (website, status, createdby) values (:website, :status, :username)",
                            batch);

            return updateCounts;

        }
Run Code Online (Sandbox Code Playgroud)

但是,我尝试使用相同的技术代替bean的地图列表,它失败了(正确地说是这样).

public int[] bulkInsertIntoSiteTable(List<Map<String, Object>> list){
        SqlParameterSource[] batch = SqlParameterSourceUtils
                .createBatch(list.toArray());
        int[] updateCounts = v2_template
                .batchUpdate(
                        "insert into sitestatus (website, status, createdby) values (:website, :status, :username)",
                        batch);

        return updateCounts;

    }
Run Code Online (Sandbox Code Playgroud)

上面的代码失败,出现以下异常:

Exception in thread "main" org.springframework.dao.InvalidDataAccessApiUsageException: No value supplied …
Run Code Online (Sandbox Code Playgroud)

java spring named-parameters batch-insert

13
推荐指数
1
解决办法
2万
查看次数

为清晰起见,我想在Dart中使用命名参数.我应该怎么处理它们?

TL; DR:由于有意识的设计选择,命名参数是可选的.没有官方语言支持,有没有办法强制执行(并通知)所需的命名参数?


我发现在定义类时使用命名参数非常有用.以AbilityMMORPG 为例:

class Ability {

  final name;
  final effectDuration;
  final recast;            // wait time until next use
  // ...
}
Run Code Online (Sandbox Code Playgroud)

effectDuration并且recast两者都携带相同类型的信息(即持续时间),并且可能由相同的数据类型表示.很容易混淆哪个数字去哪里.但是,它们对于对象的正确性都是至关重要的信息,因此在实例化期间它们不会丢失.

我可以通过try-catch打破程序来强制执行这些参数的要求,但这对于使用该类并且不知道的人来说听起来不是很有趣(缺少阅读文档并直观地理解类的内容)他们是必需的.

是否有办法强制执行某些命名参数的要求,同时管理通知呼叫者所述要求和/或帮助他们正确使用它?

named-parameters required dart flutter

13
推荐指数
4
解决办法
7980
查看次数

带有命名参数的vsprintf或sprintf,或PHP中的简单模板解析

我正在寻找一种方法来为或使用命名参数.sprintfprintf

例:

sprintf(
  'Last time logged in was %hours hours, 
   %minutes minutes, %seconds seconds ago'
  ,$hours,$minutes, $seconds
);
Run Code Online (Sandbox Code Playgroud)

或通过vsprintf和一个关联数组.

我在这里找到了一些编码示例

function sprintfn ($format, array $args = array())
Run Code Online (Sandbox Code Playgroud)

http://php.net/manual/de/function.sprintf.php

和这里

function vnsprintf( $format, array $data)
Run Code Online (Sandbox Code Playgroud)

http://php.net/manual/de/function.vsprintf.php

人们写自己的解决方案.

但我的问题是,是否有可能有一个标准的PHP解决方案来实现这一点,还是有另一种方式,也许是由PEAR提供的简单的PHP模板,我可以通过坚持标准的PHP实现这一点?

谢谢你的帮助.

php string.format printf templates named-parameters

12
推荐指数
5
解决办法
2万
查看次数

如何从命令行提供非 slurpy 数组或命名数组?

首先:raku (perl6) 很棒。克罗也是。只用了一个周末就坠入爱河。但是现在我偶然发现了一些必须非常简单的东西。

如果我在多分派 MAIN 中使用 slurpy 参数,则可以识别并完美运行:

multi MAIN( 'config', 'add', *@hostnames ) {
Run Code Online (Sandbox Code Playgroud)

但是,如果我将其设为非 slurpy 数组,则要么无法识别,要么我不知道如何从命令行提供它:

multi MAIN( 'config', 'add', @hostnames ) {
Run Code Online (Sandbox Code Playgroud)

我希望这些调用之一能够工作:

$ cli.raku config add www.example.com example.com
$ cli.raku config add www.example.com,example.com
$ cli.raku config add www.example.com, example.com
Run Code Online (Sandbox Code Playgroud)

Cro CLI 中使用了类似的构造,但是没有示例说明如何使用文档中的数组调用其中一个命令。

我也用一个数组作为命名参数尝试了这个:

my %*SUB-MAIN-OPTS = :named-anywhere;
multi MAIN( 'config', 'add', :@hostnames) {
Run Code Online (Sandbox Code Playgroud)

鉴于raku 文档中的示例,我希望它可以工作:

$ cli.raku config add --hostnames=www.example.com example.com
Run Code Online (Sandbox Code Playgroud)

但它没有,也没有逗号或空格逗号分隔的变体。在所有情况下,我都会获得使用信息。

multiple-dispatch command-line-interface named-parameters raku

12
推荐指数
1
解决办法
139
查看次数