Single html Страница и машинопись [дубликат]

Вам нужно иметь изменяемую ссылку на каждый элемент. iter возвращает неизменяемые ссылки. И неизменяемая ссылка на изменяемую переменную сама по себе не изменчива. Вместо этого используйте iter_mut или for task in &mut self.tasks.

Затем, проще всего сделать, чтобы встроить work_one в work:

pub fn work(&mut self) {
    for task in self.tasks.iter_mut() {
        task.do_it()
    }
}

К сожалению, расщепление этого на две функции довольно болезненно. Вы должны гарантировать, что вызов self.work_one не изменит self.tasks. Rust не отслеживает эти вещи через границы функций, поэтому вам нужно разделить все остальные переменные-члены и передать их отдельно для функции.

См. Также:

53
задан gremo 3 July 2013 в 12:33
поделиться

2 ответа

Ограничение относится к упрощенному синтаксису CommonJS по сравнению с обычным синтаксисом обратного вызова:

Загрузка модуля по сути является асинхронным процессом из-за неизвестного времени его загрузки. Однако RequireJS в эмуляции серверной спецификации CommonJS пытается дать вам упрощенный синтаксис. Когда вы делаете что-то вроде этого:

var foomodule = require('foo');
// do something with fooModule

То, что происходит за кулисами, заключается в том, что RequireJS смотрит на тело вашего функционального кода и анализирует, что вам нужно «foo» и загрузить его до вашей функции выполнение. Однако, когда переменная или что-то иное, чем простая строка, например ваш пример ...

var module = require(path); // Call RequireJS require

... then Require не может разобрать это и автоматически преобразовать его. Решение состоит в том, чтобы преобразовать в синтаксис обратного вызова;

var moduleName = 'foo';
require([moduleName], function(fooModule){
    // do something with fooModule
})

Учитывая вышеизложенное, рассмотрим один из возможных вариантов повторного использования вашего второго примера для использования стандартного синтаксиса:

define(['dyn_modules'], function (dynModules) {
    require(dynModules, function(){
        // use arguments since you don't know how many modules you're getting in the callback
        for (var i = 0; i < arguments.length; i++){
            var mymodule = arguments[i];
            // do something with mymodule...
        }
    });

});

EDIT : Из вашего собственного ответа, я вижу, вы используете underscore / lodash, поэтому использование _.values и _.object может упростить цикл с использованием массива аргументов, как указано выше.

65
ответ дан explunit 26 August 2018 в 13:46
поделиться

Отвечая на вопрос. С сайта RequireJS:

//THIS WILL FAIL
define(['require'], function (require) {
    var namedModule = require('name');
});

Это не работает, потому что requirejs обязательно должен загружать и выполнять все зависимости до вызова заводской функции выше. [...] Итак, либо не проходите в массиве зависимостей, либо, если используете массив зависимостей, перечислите все зависимости в нем.

Мое решение:

// Modules configuration (modules that will be used as Jade helpers)
define(function () {
    return {
        'moment':   'path/to/moment',
        'filesize': 'path/to/filesize',
        '_':        'path/to/lodash',
        '_s':       'path/to/underscore.string'
    };
});

Загрузчик:

define(['jade', 'lodash', 'config'], function (Jade, _, Config) {
    var deps;

    // Dynamic require
    require(_.values(Config), function () {
        deps = _.object(_.keys(Config), arguments);

        // Use deps...
    });
});
7
ответ дан gremo 26 August 2018 в 13:46
поделиться
Другие вопросы по тегам:

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