标签: language-features

以编程方式在Scala中设置重复参数

我正打算Futures.awaitAll用可变数量的井来打电话Future.awaitAll被定义为awaitAll(timeout : Long, fts : Future[Any]*).我试过传入a List和a Array但两者都不起作用:

list = future1 :: future2 :: Nil

Futures.awaitAll(1000, list)

found : List[scala.actors.Future[Any]] required: scala.actors.Future[Any]
Run Code Online (Sandbox Code Playgroud)

编辑:我现在要做的是Futures.awaitAll使用可变数量的参数(1到n)以编程方式调用.所以使用Futures.awaitAll(1000, future1, future2)不是一种选择.

Scala编程的第8.8章没有给我任何提示如何解决这个问题,所以欢迎帮助:)

language-features scala variadic-functions

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

在php中为const错误分配const值

<?php
 class Lala {
  const a = "a";
  const b = a . "b";
 }
?>
Run Code Online (Sandbox Code Playgroud)

解析错误:语法错误,第4行意外'(',期待','或';'

有什么问题呢?

php language-features constants

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

是否有允许分配/创建的语言功能的名称?

这对我来说有点难以表达,但在PHP中你可以这样说:

$myArray['someindex'] = "my string";

如果没有名称的索引,它将创建/分配值,如果有索引,它将覆盖现有值.

将此与Javascript进行比较,今天我必须做以下检查:

if (!myObject[key]) myObject[key] = "value";

我知道这可能有点挑剔,但有没有PHP(和许多其他语言)能够自己做这些检查的能力的名称,而不是Javascript的更详细(读取:PITA)方法?

编辑

我在问这个时很困惑.假设你要添加到这个结构:

myobject = {
    holidays : {easter : {date : 4/20/2010,
                          religion : Christianity}
                holi : {date : 3/10/2010,
                        religion : hindu} 
}
Run Code Online (Sandbox Code Playgroud)

今天我遇到了一个问题,我收到了表格数据,我想通过构建一个对象把它放到一棵树上.

当我开始我的循环时,我很难制作新的索引,就好像myobject['holidays'][thisVariable][date] = 4/20/2010这棵树基本上没有建立到那一点.

如果不清楚的话,我会从我的另一台计算机上获取代码示例,对于糟糕的思考感到抱歉.

javascript language-features object-notation

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

Python功能

是否有关于Python语言提供哪些功能的文章/论文?为什么要使用Python而不是任何其他语言?Python的优点和缺点是什么?

python language-features language-comparisons

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

集合初始化语法,用于什么?

我们可以使用像这样的功能

public static List<T> New<T>(params T[] items) {
    return new List<T>(items);
}
Run Code Online (Sandbox Code Playgroud)

更重要的是它更好

var list = new List<int> {1,2,3};
var list = List.New(1,2,3);
Run Code Online (Sandbox Code Playgroud)

那么,当我们真的需要使用它时?

字典

public static Dictionary<T, K> New<T, K>(T key, K value) {
    return new Dictionary<T,K>().FAdd(key, value);
}

var dict = new Dictionary<int, string>(){
 {1, "a"},
 {2, "b"}
};

var dict = Dict.New(1,"a").FAdd(2, "b");
Run Code Online (Sandbox Code Playgroud)

为什么它更好,键入推断

var x = new Dictionary<string, List<int>>(){
   {"a", new List<int>{1}},
   {"b", new List<int>{2}},
}

var x = Dict.New("a", List.New(1)).FAdd("b", List.New(2));
Run Code Online (Sandbox Code Playgroud)

c# language-agnostic language-features programming-languages language-design

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

C#应该有一个forone结构吗?(或者处理零或一个案件的最简洁方法是什么)

当处理一个包含none,一个或多个项的枚举时,foreach循环可以很容易地迭代它们,LINQ Select可以很容易地从枚举项目中项目.

        foreach (var attr in p.GetCustomAttributes().OfType<A>()) ...
Run Code Online (Sandbox Code Playgroud)

当处理包含none或只有一个项目的枚举时,事情会有点棘手.您可以使用相同的foreach循环,但不能确保只存在其中一个项目,并且它可能会执行多次.

您可以添加.Take(1)以清楚地表明您只需要一个并确保循环仅执行一次.但如果不止一个,那就不会抛出异常.

        foreach (var attr in ...().Take(1)) ...
Run Code Online (Sandbox Code Playgroud)

您可以事先添加一个检查,以确保只有一个,或者可能是一个新的代码合同来检查,但这是相当混乱的:

        Contract.Requires(p..GetCustomAttributes().OfType<A>().Count() < 2);
        foreach (var attr in p.GetCustomAttributes().OfType<A>()) ...
Run Code Online (Sandbox Code Playgroud)

您甚至可以创建一个新的扩展方法.ZeroOrOne<T>(),它返回枚举中的第一个元素,然后如果您要求更多,则抛出异常.

        foreach (var attr in ...().ZeroOrOne()) ...
Run Code Online (Sandbox Code Playgroud)

或者你可以摆脱循环,使用.SingleOrDefault()然后测试null,这在意图方面显然是最清楚的,并确保循环执行零次或一次但是更多的代码,它不那么"声明性"而且它不是"可组合":

            var attr =  p.GetCustomAttributes().OfType<A>().SingleOrDefault();
            if (attr != null)
            {
               ...
Run Code Online (Sandbox Code Playgroud)

那么问题是:人们更喜欢上述哪种(或其他建议)?为什么? 大多数习惯于程序代码的程序员自然会更喜欢这个if语句,但对于那些深入到函数式编程的人来说,你有更好的方法吗?

其他一些语言有清晰的技术来处理这个问题,例如F#的数组模式可以匹配零个,一个或多个,或者失败.是否存在foroneC#语言中的构造的情况,它等同于检查枚举中是否有零或一个然后执行它?

[这里的具体示例是获取自定义属性,其中属性已被标记为不允许多个,但问题更一般地是关于处理零/一个案例.]

c# ienumerable language-features

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

为什么这个GC系统坏了?

我想到了一个我无法看到主要缺陷的GC,我想知道为什么它没有被更普遍地使用,或者为什么我没有听说过它的使用.

该系统是:

  • 所有对象都附加了一个4字节的unsigned int计数器.(可能是2个字节,我不知道.
  • 无论何时构造对象,其计数器都从1开始.
  • 将对象作为参数发送到函数时,其计数器会递增.
  • 当一个对象到达一个不再在函数内使用的点(可能是作用域的最后)时,它的计数器会递减.
  • 当对象的计数器达到零时,它将被删除,因为代码中的任何位置都没有被引用.

是否存在计数器出现故障的边缘情况?有哪些缺点和优点?

提前感谢您的协助.

language-features garbage-collection compiler-theory

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

Objective-C远程消息功能是否已弃用?

我发现有某种远程通讯功能用Objective-C语言.但它已不再记录在案.它被弃用了吗?这个功能发生了什么?

language-features objective-c

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

Typescript允许以number开头创建一个类字段名

为什么typescript允许使用数字中的类字段名称

 1: number = 1;
 2: number = 2;
Run Code Online (Sandbox Code Playgroud)

根据这个讨论为什么变量名称不能以数字开头?我们不能创建以数字开头的类字段名称(JavaScript如果我们定义变量名称以数字开头,也不允许).但是在typescript中我们可以创建一个以数字(无论如何)开头的类字段名称.为什么?这是一个错误typescript吗?

参考

在此输入图像描述

javascript language-features typescript angular

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

非构造函数的模式匹配

模式匹配和惰性求值结合在一起的最强大方法之一是绕过昂贵的计算。然而,我仍然感到震惊的是,Haskell 只允许构造函数的模式匹配,这根本就不是模式匹配!

有没有办法在 Haskell 中实现以下功能:

exp :: Double -> Double
exp 0 = 1
exp (log a) = a
--...

log :: Double -> Double
log 1 = 0
log (exp a) = a
--...
Run Code Online (Sandbox Code Playgroud)

我发现这很有用的最初问题是在 Monoid 类中编写关联性首选项/规则:

class Monoid m where
  iden :: m
  (+) m -> m -> m

  (+) iden a = a
  (+) a iden = a

  --Line with issue
  (+) ((+) a b) c = (+) a ((+) b c)
Run Code Online (Sandbox Code Playgroud)

language-features haskell pattern-matching

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