Tag: variadic functions

以可变parameter passing列表

我有一个List<Thing> ,我想把它传递给一个声明doIt(final Thing… things) 。 有没有办法做到这一点? 代码看起来像这样: public doIt(final Thing… things) { // things get done here } List<Thing> things = /* initialized with all my things */; doIt(things); 该代码显然不工作,因为doIt()采取Thing不List<Thing> 。 有没有办法通过列表作为可变参数? 这是在一个Android应用程序,但我不明白为什么解决scheme将不适用于任何Java

如何编写一个以可变参数为参数的Haskell函数

我试图创build一个函数,获取一个可变参数作为参数 ,即 func :: (a -> … -> a) -> a 我怎么能做到这一点? 我读过关于polyvariadic函数 ,我敢肯定, Oleg已经做到了 ,但是我迷失了,试图将函数的模式应用到函数中,并且使用可变参数作为参数。 特别是Olegs的方法似乎只与格拉斯哥扩展工作,我希望解决scheme在纯粹的Haskell 98(如Text.Printf呢 )工作。 我问的原因是我试图build立一个函数,它将一个布尔函数作为一个参数,并检查它是否是一个重言式,即 isTautology :: (Bool -> … -> Bool) -> Bool 所以你可以input: isTautology (\x -> x && not x) isTautology (\xy -> x && y || not y) 我的问题是,我一直在阅读的诀窍是使返回types的typesvariables(以便它可以是结果或另一个函数),但我的返回types是固定的(Bool)。

逗号在C ++中的可变参数函数声明中省略

我习惯于像这样声明可变参数的函数: int f(int n, …); 在阅读C ++编程语言时,我发现书中的声明省略了逗号: int f(int n…); // the comma has been omitted 看起来这个语法是特定于C ++的,当我尝试使用C编译器进行编译时出现此错误: test.c:1:12: error: expected ';', ',' or ')' before '…' token int f(int n…); 写入int f(int n, …)和int f(int n… )是否有区别? 为什么这个语法添加了C ++?

Java 3点参数(可变参数)行为时传递没有参数或null

我试过这个,并从JAVA得到奇怪的行为,有人可以解释这个对我来说? boolean testNull(String… string) { if(string == null) { return true; } else { System.out.println(string.getClass()); return false; } } boolean callTestNull(String s) { return testNull(s); } 然后我有testing用例: @Test public void test_cases() { assertTrue(instance.testNull(null)); // NULL assertFalse(instance.testNull()); // NOT NULL assertFalse(instance.callTestNull(null)); // NOT NULL } 问题是如果我直接用参数null调用testNull() ,我会返回true ,但是如果调用callTestNull()与null ,它调用testNull() ,它告诉我参数不是null,而是空数组。

C ++ 11:variables模板函数参数的数量?

我怎样才能得到一个可变参数的模板函数的数量? 即: template<typename… T> void f(const T&… t) { int n = number_of_args(t); … } 在上面实现number_of_args的最好方法是什么?

如何在Objective-C中创build可变参数方法

也许这对大多数人来说显然是简单的,但是请你举个例子来说明如何创build类似的方法(在Objective-C中)和C中的函数来创build像NSString的stringWithFormat:或者NSLog() 只是提醒一下: [NSString stringWithFormat:@"example tekst %i %@ %.2f",122,@"sth",3.1415"]; NSLog(@"account ID %i email %@",accountID,email); 我想创build类似于NSString的方法stringWithFormat: , NSURL – urlWithFormat 。 先谢谢你。

方法签名中的Java“params”?

在C#中,如果你想要一个方法有一个不确定数量的参数,你可以使方法签名中的最后一个参数成为一个params这样方法参数看起来就像一个数组,但是允许使用该方法的每个人传递参数键入作为来电者想要的。 我相当确定Java支持类似的行为,但我无法find如何做到这一点。

如何将ArrayList传递给可变参数方法参数?

基本上我有一个位置的ArrayList: ArrayList<WorldLocation> locations = new ArrayList<WorldLocation>(); 在这个下面我调用下面的方法: .getMap(); getMap()方法中的参数是: getMap(WorldLocation… locations) 我遇到的问题是我不知道如何将整个locations列表传递到该方法。 我试过了 .getMap(locations.toArray()) 但getMap不接受,因为它不接受Objects []。 现在,如果我使用 .getMap(locations.get(0)); 它会工作完美…但我需要以某种方式通过所有的位置…我当然可以继续添加locations.get(1), locations.get(2)等,但arrays的大小变化。 我只是不使用ArrayList的整个概念 最简单的方法是什么? 我觉得我现在只是没有想到。

Java SafeVarargs注释,是否存在标准或最佳实践?

我最近遇到了java @SafeVarargs注释。 在Java中使用可变参数函数的不安全让我相当困惑(堆中毒擦除types?),所以我想知道一些事情: 是什么使得可变的Java函数在@SafeVarargs意义上是不安全的(最好以深入的例子的forms来解释)? 为什么这个注释留给程序员呢? 这不是编译器应该能够检查的东西吗? 是否有一些标准必须坚持,以确保他的function确实是安全的? 如果没有,最好的做法是什么来确保它?

如何将“参数”对象转换为JavaScript中的数组?

在JavaScript中的arguments对象是一个奇怪的疣 – 它在大多数情况下就像一个数组,但它实际上不是一个数组对象。 由于它完全是其他的东西 ,它没有Array.prototype的有用函数,比如forEach , sort , filter和map 。 用一个简单的for循环来从一个参数对象构造一个新的数组是非常容易的。 例如,这个函数对它的参数进行sorting: function sortArgs() { var args = []; for (var i = 0; i < arguments.length; i++) args[i] = arguments[i]; return args.sort(); } 然而,这仅仅是为了访问非常有用的JavaScript数组函数而必须做的一件相当可怜的事情。 有使用标准库的内置方法吗?