代码之家  ›  专栏  ›  技术社区  ›  Techmaddy

为什么函数没有参数化的返回类型,因为它有参数化的输入?

  •  3
  • Techmaddy  · 技术社区  · 17 年前

    这总是迫使我们返回一个参数,以防我需要返回多个参数,比如一个列表和一个字符串。函数参数中没有此限制。

    6 回复  |  直到 17 年前
        1
  •  8
  •   Spence    17 年前

    这个问题是函数式语言(如F#、haskell等)试图解决的问题。问题是,在硬件中,函数的返回值最初是通过CPU寄存器返回的,因此只能返回单个值。通过这个遗留的C++语法和C++(和C,java,Java)也继承了这个。

        2
  •  4
  •   Thorbjørn Ravn Andersen    17 年前

    这还允许您以记录参数的相同方式记录函数返回的内容。

        3
  •  4
  •   Srikanth    17 年前

    >>> def myFunc():
    ...   string_val = "techmaddy"
    ...   int_val = 10
    ...   return string_val, int_val
    ...
    >>>
    >>> s, i = myFunc()
    >>>
    >>> print s
    techmaddy
    >>>
    >>> print i
    10
    

    我希望这会有帮助。

        4
  •  3
  •   Michael Myers KitsuneYMG    17 年前

    或者,从方法中返回对象[],然后执行以下操作

    return new Object[] { list, string};
    

    如果需要更多参数化的返回类型,可以创建Pair<十、 Y>类或三元组<Z、 Y,Z>把那些还给我。

        5
  •  1
  •   davogones    17 年前

    幸运的是,Javascript是一种动态语言。这意味着您可以构造任何类型的对象并返回它。这有效地满足了“参数化”返回值的要求,尽管是以一种不太类型安全的方式。

    function stuff() {
        return {
            "foo": "a",
            "bar": "b"
        }
    }
    
    var theStuff = stuff();
    alert(theStuff.foo + theStuff.bar); // should output "ab"
    
        6
  •  0
  •   Peter Lawrey    17 年前

    处理复杂返回行为的方法是传递该方法调用的接口。 例如

    public interface Results<R> {
        public void processing(String stage);
        public void success(String mesg, R result);
        public void successes(String mesg, List<R> result);
        public void thrown(Throwable t);
    }
    
    public void process(Results<R> results, String text, List<String> data);