Swift вложенная функция

Вы можете использовать пакет java.lang.instrument

Скомпилировать и поместить этот класс в JAR:

import java.lang.instrument.Instrumentation;

public class ObjectSizeFetcher {
    private static Instrumentation instrumentation;

    public static void premain(String args, Instrumentation inst) {
        instrumentation = inst;
    }

    public static long getObjectSize(Object o) {
        return instrumentation.getObjectSize(o);
    }
}

Добавить следующее в MANIFEST.MF:

Premain-Class: ObjectSizeFetcher

Использовать getObjectSize:

public class C {
    private int x;
    private int y;

    public static void main(String [] args) {
        System.out.println(ObjectSizeFetcher.getObjectSize(new C()));
    }
}

Вызывать с помощью:

java -javaagent:ObjectSizeFetcherAgent.jar C

-2
задан FrankieWong 16 January 2019 в 08:43
поделиться

1 ответ

  1. давайте начнем с первой точки

    func chooseStepFunction(backward: Bool) -> (Int) -> Int

Просматривая это объявление функции, вы можете сказать, что chooseStepFunction является функция, которая принимает один аргумент типа Bool и возвращает функцию типа (Int)-> Int, которая принимает один аргумент Int в качестве параметра и возвращает Int. поэтому здесь chooseStepFunction возвращает функцию типа (Int)->Int на основе переданного в backward параметра.

  1. В следующем операторе return мы не вызываем stepBackward или stepForward, поэтому мы не используем скобки (). с точки зрения первого вы должны понимать, что chooseStepFunction будет возвращать функцию, и эта функция имеет тип (Int)->Int, и внимательно посмотрите, вы обнаружите, что сигнатура stepBackward and stepForward имеет значение (Int)->Int и будет возвращена как chooseStepFunction
  2. [ 1126]

    return backward ? stepBackward : stepForward

    3.

    let moveNearerToZero = chooseStepFunction(backward: currentValue > 0) здесь chooseStepFunction возвращают функцию типа (Int)->Int, которая хранится в moveNearerToZero, поэтому это не простая переменная, это функция, поэтому мы можем использовать скобки.

    [1133 ] Следующее описание взято из документации Swift, которая объясняет, как вы можете использовать функцию как тип:

    Использование типов функций Вы используете типы функций, как и любые другие типы в Swift. Например, вы можете определить константу или переменную для типа функции и назначить соответствующую функцию для этой переменной:

    var mathFunction: (Int, Int) -> Int = addTwoInts Это можно прочитать как:

    «Определить переменную называется mathFunction, которая имеет тип «функция, которая принимает два значения Int и возвращает значение Int.» Установите эту новую переменную для ссылки на функцию с именем addTwoInts. »

    Функция addTwoInts(_:_:) имеет того же типа, что и переменная mathFunction, и поэтому это присваивание разрешено средством проверки типов Swift.

    Теперь вы можете вызывать назначенную функцию с именем mathFunction:

    print("Result: \(mathFunction(2, 3))")
    

    Надеюсь, это поможет. [+1139]

0
ответ дан Deepak 16 January 2019 в 08:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: