看一下我的库的一些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) 是否有可能在php像python有一个名为函数参数?一个示例用例是:
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) 我想知道是否可以确定是否在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中完成?
谢谢
我正在尝试使用命名参数将字典中的数据插入数据库.我有一个简单的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文本文件构建它.
任何人对我如何做到这一点都有任何建议?
我刚刚开始使用F#,看看如何使用currying将第一个参数预加载到函数中.但是如何用第二,第三或其他任何参数来做呢?命名参数会使这更容易吗?是否有任何其他功能语言具有命名参数或其他方式使currying对参数顺序无动于衷?
我有一个C#方法,其中使用params关键字声明了一个可变长度参数列表:
public void VariableLengthParameterFunction (object firstParam,
params object[] secondParam)
Run Code Online (Sandbox Code Playgroud)
调用方法时有没有办法使用命名参数?
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) 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打破程序来强制执行这些参数的要求,但这对于使用该类并且不知道的人来说听起来不是很有趣(缺少阅读文档并直观地理解类的内容)他们是必需的.
是否有办法强制执行某些命名参数的要求,同时管理通知呼叫者所述要求和/或帮助他们正确使用它?
我正在寻找一种方法来为或使用命名参数.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实现这一点?
谢谢你的帮助.
首先: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
named-parameters ×10
php ×2
python ×2
.net ×1
batch-insert ×1
c# ×1
currying ×1
dart ×1
f# ×1
flutter ×1
java ×1
printf ×1
raku ×1
required ×1
scala ×1
spring ×1
sqlite ×1
templates ×1
value-class ×1
visibility ×1