У меня есть три функции, которые принимают один и тот же объект в качестве параметра. Но последние два ничего не делают - PullRequest
0 голосов
/ 11 января 2019

У меня есть класс «Sample», в котором хранятся данные. Я хочу заполнить эти данные влево, вправо и по центру. Я не публикую код для Sample, потому что уверен, что проблема не в этом. (Если это необходимо, я сделаю это.) Следующий код показывает, как я поступаю.

val hline_magf = SampleUtils.getDataFromOneFile("C:\\Users\\XXXX\\Desktop\\test\\hline.421.magf.csv")
val adj_ts = Preprocess.adjustTimestamps(hline_magf)
val abs = Preprocess.abs(adj_ts)
var lerp = Preprocess.lerp(abs)
val lh = Preprocess.hanning_window(lerp)

val lhl = Preprocess.pad_left(lh)           // these cause the problems somewhere
val lhr = Preprocess.pad_right(lh)
val lhm = Preprocess.pad_center(lh)

Первые шаги формируют данные и работают хорошо. (Все функции preprocess принимают Sample-объекты и возвращают Sample-объекты.) Но как только я использую одну из pad-функций, другие pad-функции больше не работают.

Если я дополняю влево, то lhr и lhm также дополняются влево, если я дополняю вначале вправо, остальные также дополняются вправо.

Функции пэда работают, как и предполагалось, когда ставятся на первое место, я протестировал три варианта.

Вот как выглядят функции:

    fun pad_left(sample: Sample): Sample {
        var ret_val = sample
        println("#### pad left")

        while (ret_val.timestamp.size < MAX_LEN) ret_val.timestamp = doubleArrayOf(0.0) + ret_val.timestamp
        while (ret_val.absoluteSquare_float.size < MAX_LEN) ret_val.absoluteSquare_float = floatArrayOf(0.0f) + ret_val.absoluteSquare_float
        while (ret_val.x_float.size < MAX_LEN) ret_val.x_float = floatArrayOf(0.0f) + ret_val.x_float
        while (ret_val.y_float.size < MAX_LEN) ret_val.y_float = floatArrayOf(0.0f) + ret_val.y_float
        while (ret_val.z_float.size < MAX_LEN) ret_val.z_float = floatArrayOf(0.0f) + ret_val.z_float

        return ret_val
    }

EDIT: Благодаря Йоль. Я добавил метод copy () в мой класс, который возвращает новый объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...