标签: syntactic-sugar

是否存在用于在Scala中的匿名函数内绑定值的语法糖?

而不是写作

((x: Double) => (((y: Double) => y*y))(x+x))(3)
Run Code Online (Sandbox Code Playgroud)

我想写点类似的东西

((x: Double) => let y=x+x in y*y)(3)
Run Code Online (Sandbox Code Playgroud)

在Scala中有类似的这种语法糖吗?

scala anonymous-function syntactic-sugar

6
推荐指数
2
解决办法
401
查看次数

在C++中进行'constify'操作是否有意义?

难道是有意义的有一个" constify"操作C/C++,使一个变量const

这是一个可能有用的示例,显然我们不想const在第一行声明它:

std::vector<int> v;
v.push_back(5);
constify v; // now it's const
Run Code Online (Sandbox Code Playgroud)

目前,没有这种可能性,你必须引入另一个变量来获得相同的效果:

std::vector<int> v0;
v0.push_back(5);
const std::vector<int>& v = v0;
Run Code Online (Sandbox Code Playgroud)

这更令人困惑,因为它在范围中添加了一个新名称,你需要使它成为一个参考,以避免复制整个向量(或使用swap?).

c++ variables language-design syntactic-sugar

6
推荐指数
4
解决办法
829
查看次数

C#语法糖 - 设置对象属性的新方法?

对于这里的核心C#编码器,这看起来似乎是一个完全愚蠢的问题 - 但是,我刚刚在AWS SDK论坛中遇到了一段示例代码,并且完全被它所取代:

   RunInstancesRequest runInstance = new RunInstancesRequest()
    .WithMinCount(1)
    .WithMaxCount(1)
    .WithImageId(GetXMLElement("ami"))
    .WithInstanceType("t1.micro");
Run Code Online (Sandbox Code Playgroud)

这很让人联想到旧的VB6 With ... End With语法,我一直对C#中没有这种语法感到遗憾 - 我已经在我的VS2008项目中编译了它,并且它可以节省许多独立的行,分别引用这些属性.

我确定我在过去读过文章解释为什么VB6样式的With块不在C#中,所以我的问题是:这种语法是否总是存在于语言中,或者它是最近的.NET更改启用了吗?我们可以覆盖所有对象实例化,然后在同一糖中进行属性更改吗?

c# syntactic-sugar

6
推荐指数
2
解决办法
2048
查看次数

Scala:替代列表语法(如果可能,使用方括号)

Scala中是否有替代的"List"语法?是否可以定义一个名为'['和']'的aditional类/类型/运算符*?

我知道'方括号'用于表示类型,但它们对于声明列表的重复性任务是完美的.

一个 ';' 要么 '?' 作为最后的资源,也会很好.

谢谢

obs:经过多次搜索,我找到的唯一选择是使用'cons':

val list = 1 :: 2 :: 3 :: Nil
Run Code Online (Sandbox Code Playgroud)

但它根本不会减少任何键输入.

  • 我仍然在Scala中学习这些东西

编辑:只是为了澄清:在我的情况下,性能不是优先考虑的问题.是的,转变不受欢迎.:P动机幕后:我喜欢Haskell风格,但不能直接用Java.

编辑2:基于Rex Kerr解决方案的最终解决方案

实现对象类型:

package a
object Types {
  type \[z] = List[z]
  implicit def make_lists[A](z: A) = new ListMaker(z)

  class ListMaker[A](a0: A) {
    private[this] val buffer = List.newBuilder[A]
    buffer += a0
    def \(z: A) = {
      buffer += z;
      this
    }
    def \\ = buffer.result
  }
}
Run Code Online (Sandbox Code Playgroud)

使用对象类型:

package a
import a.Types._

object Whatever {
  def listInListOut (l: …
Run Code Online (Sandbox Code Playgroud)

syntax scala list syntactic-sugar

6
推荐指数
2
解决办法
4957
查看次数

python:最简洁的方法将父类中的每个方法包装在"with"中

我有一个父类,有一堆类方法:

class Parent():

    @classmethod
    def methodA(cls):
        pass

    @classmethod
    def methodB(cls):
        pass
Run Code Online (Sandbox Code Playgroud)

在我的子类中,我想将一个方法的子集包装在"with"中.它应该达到这个效果:

class Child(Parent):

    @classmethod
    def methodA(cls):
        with db.transaction:
            super(Child, cls).methodA()
Run Code Online (Sandbox Code Playgroud)

我有一堆遵循这种模式的方法,我宁愿不重复自己.有更清洁的方法吗?

python syntactic-sugar

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

如何:_*将有序集合转换为变量arg列表?

我一直在使用:_*转换Seq[String]String*,我意识到,我不明白这是如何工作的引擎盖下.

有没有一种简单的方法来考虑这个?

scala syntactic-sugar

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

如何将序列句法糖([1..6])翻译成实际的列表语法(1:2:3 ... 6)?

Haskell如何翻译[]进入列表定义?他们是否重视构造者或其他什么?他们是新类型吗?有没有办法定义一个outfix语法,而不是一个中缀语法?

syntax haskell enumeration list syntactic-sugar

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

有什么理由我们不能在元组周围有一些语法糖吗?

我希望在C#中看到的是关于元组的更好的语法,例如.

var rgb = (1.0f, 1.0f, 1.0f);
// Inferred to be Tuple<float, float, float>
// Translated to var rgb = Tuple.Create(1.0f, 1.0f, 1.0f)
Run Code Online (Sandbox Code Playgroud)

var x, y, z = rgb;

// Translated to:
//    float x = rgb.Item1;
//    float y = rgb.Item2;
//    float z = rgb.Item3;
Run Code Online (Sandbox Code Playgroud)

C#语言中有什么禁止这个,或者实现它太难/不现实吗?也许还有其他语言功能会与此直接冲突?

请注意,我不是在询问这是否在微软雷达上,或者即使它与他们对C#的愿景保持一致,只是理论上它有明显的阻挡剂.

编辑 以下是其他CLI语言的一些示例

// Nemerle - will use a tuple type from a language specific runtime library
def colour = (0.5f, 0.5f, 1.0f);
def (r, g, b) = colour;

// F# …
Run Code Online (Sandbox Code Playgroud)

c# tuples syntactic-sugar

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

foreach循环是否用迭代器重写为for循环?

这篇文章解释了foreach循环直接对应于使用迭代器.如果我写一个foreach循环,它真的会转换成for for iterator?特别是给定的循环:

for(Integer i : createList()){
    System.out.println(i);
}
Run Code Online (Sandbox Code Playgroud)

createList()无论如何,我保证总是只打一次电话吗?它被重写为:

for(Iterator<Integer> i = createList().iterator(); i.hasNext(); ) {
    System.out.println(i.next());
}
Run Code Online (Sandbox Code Playgroud)

在某种中间步骤或恰好产生与上述相同的字节码?

java foreach compilation syntactic-sugar

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

没有命名类类型的方法函数指针模板

考虑这个template函数,调用一个对象的方法class T.

template<class T, void (T::*Method)()>
void circuitousInvoke(T* callee) {
    (callee->*Method)();
}
Run Code Online (Sandbox Code Playgroud)

例:

struct A {
    void test() {};
}

circuitousInvoke<A, &A::test>(new A);
Run Code Online (Sandbox Code Playgroud)

由于参数中的circuitousInvoke已经知道类型T callee,有没有办法避免输入这种类型?

circuitousInvoke<&A::test>(new A);
Run Code Online (Sandbox Code Playgroud)

编辑

此问题仅涉及模板功能.在这种情况下,继承和其他基于类的解决方案不适用.(在我的项目中使用包装器对象会比输入其他名称更糟糕.)

c++ templates member-function-pointers syntactic-sugar

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