, Каково различие между, "включают" и "требуют" в Ruby?
Ответ:
включать и требует, чтобы методы сделали совсем другие вещи.
потребовать метод делает то, что включает, делает на большинстве других языков программирования: петлять. Это также отслеживает то, чего Вы потребовали в прошлом и не потребуете того же файла дважды. Для петляния без этой добавленной функциональности можно использовать метод загрузки.
включать метод берет все методы от другого модуля и включает их в текущий модуль. Это - вещь уровня языка в противоположность вещи уровня файла, поскольку с требуют. Включать метод является основным способом "расширить" классы с помощью других модулей (обычно называемый соединением-ins). Например, если Ваш класс определяет метод "каждый", можно включать смесительный Счетный модуль, и это может действовать как набор. Это может сбивать с толку, поскольку включать глагол используется очень по-другому на других языках.
Поэтому, если Вы просто хотите использовать модуль, вместо того, чтобы расширить его или сделать соединение - в, тогда Вы захотите использовать
require
.Достаточно странно, Ruby
require
походит на Cinclude
, в то время как Rubyinclude
является почти ничем как Cinclude
.
Используйте std :: строка
. Его оператор <<
перегружен для всех встроенных типов.
#include <sstream>
std::stringstream s;
s << "(" << c1 << "," << c2 << ")";
storedCorrect[count] = s.str();
Это работает так, как и следовало ожидать - так же, как вы печатаете на экран с помощью std :: cout
. Вместо этого вы просто «печатаете» строку. Внутреннее устройство оператора <<
позаботится о том, чтобы было достаточно места и выполнить все необходимые преобразования (например, double
в string
).
Также, если у вас есть библиотека Boost, вы можете рассмотреть возможность изучения lexical_cast
. Синтаксис очень похож на обычное приведение типов в стиле C ++:
#include <string>
#include <boost/lexical_cast.hpp>
using namespace boost;
storedCorrect[count] = "(" + lexical_cast<std::string>(c1) +
"," + lexical_cast<std::string>(c2) + ")";
Под капотом boost :: lexical_cast
в основном делает то же самое, что и std :: stringstream
. Ключевым преимуществом использования библиотеки Boost является то, что вы можете так же легко пойти другим путем (например, string
в double
). Больше не нужно возиться с atof ()
или strtod ()
и необработанными строками в стиле C.
std::string stringify(double x)
{
std::ostringstream o;
if (!(o << x))
throw BadConversion("stringify(double)");
return o.str();
}
Часто задаваемые вопросы по C ++: http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.1
Я считаю, что sprintf - это то, что вам нужно. Я есть в стандартной библиотеке, например printf. Для получения дополнительной информации перейдите по ссылке ниже:
Вы не можете сделать это напрямую. Есть несколько способов сделать это:
Используйте std :: stringstream
:
std :: ostringstream s;
s << "(" << c1 << "," << c2 << ")";
storedCorrect [count] = s.str ()
Используйте boost :: lexical_cast
:
storedCorrect [count] = "(" + boost :: lexical_cast (c1) + "," + boost :: lexical_cast < std :: string> (c2) + ")";
Используйте std :: snprintf
:
char buffer [256]; // убедитесь, что он достаточно большой !!!
snprintf (буфер, sizeof (буфер), «(% g,% g)», c1, c2);
storedCorrect [количество] = буфер;
Есть несколько других способов, использующих различные функции преобразования двойной строки в строку, но это основные способы, которыми вы увидите это.