我将为物理专业的学生做一个关于Java的讲座,我想知道如何正确打开文件。
在我的许多专业应用程序中,我做了类似的事情:
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("file")));
try{
....
}finally {
bufferedWriter.close();
}
Run Code Online (Sandbox Code Playgroud)
恕我直言,没关系,即阅读器将始终关闭。
当我将其作为我的学生的示例时,我想知道如果构造函数InputStreamReader抛出异常会发生什么 --- FileInputStream 将打开,但它不会被我的代码关闭(因为这些对象是在 try-finally 之外创建的)堵塞。
那么这是正确的习语吗?如果是的话那为什么呢?如果打开流不是正确的习惯用法,请给我指出正确的习惯用法!
编辑:我正在寻找既正确又易于编写和理解的习语,物理学生是编程的初学者。
编辑:愚蠢的我,我复制了错误的示例 --- 如果我使用作家而不是读者,它会变得更加复杂。
在django中处理whith模型继承时,是否可以删除模型子类的实例,而无需删除超类本身?
使用Django示例,您可以只删除Resturaunt对象并保留Place对象吗?
调试运行我的代码不管怎么说,当我发现基本上减去声明boolean的float.
然后我尝试在python控制台中关注:
>>> 15.0 - True
14.0
>>> 15.0 - False
15.0
Run Code Online (Sandbox Code Playgroud)
任何人都可以向我解释:
and,not并且or在布尔值上:http://docs.python.org/3/library/stdtypes.html#boolean-operations-and-or-not)我希望能够找到包含以下内容的链接:hello,Hello,hEllo,heLlo等.到目前为止,我使用的find_elements_by_partial_link_text是casse敏感:
links = driver.find_elements_by_partial_link_text('hello')
Run Code Online (Sandbox Code Playgroud) 背景:我们正在设计一个物理应用程序,它将进行大量的数据分析,但我们的重点是整合物理电子设备.
基本上我希望能够用Java编写的C++库编写的root(它是用C++编写的CERN的大数据分析库).基本上从Java中使用ROOT类的能力(并且不会浪费太多时间来编写JNI包装器)对我们来说是一个显而易见的事情(如果它很难,我们很可能会使用Qt).
我可以想到以下方法
其他可能很重要的事情:我们可以访问根源代码,但我们不想改变它.我们希望结果是可移植的.我们想坚持免费图书馆.正如我所说 - 我们可以从一开始就使用大量的ROOT代码,而不用大惊小怪.
如果期望仅通过AJAX使用,但是在没有正确的ajax头的情况下调用,则应该返回什么HTTP状态?我觉得我应该表示一些错误,但我找不到合适的错误.
我想最好是405方法不允许,但是如果例如ajax GET请求返回内容并且普通GET将返回405则会很奇怪.
我正在重新学习C++,而我正在努力学习boost::iostreams::mapped_file.这个类将文件数据映射到char*,我想把它投射到double*(因为我正在使用双打).
我可以使用C风格的double* foo = (double*) data强制转换:但是我正在尝试使用惯用的C++,而C++更喜欢C++强制转换,如:static_cast等等.
我提出了:
double* data = static_cast<double*>((void*)file.data());
Run Code Online (Sandbox Code Playgroud)
(file-> data returns char*).哪个真的不干净.
这是我正在尝试做的(此代码有效!):
BOOST_AUTO_TEST_CASE(OpenMMapArray){
typedef boost::multi_array_ref<double, 3> arrayd3;
typedef std::array<size_t, 3> index3d;
index3d shape = {{ 20, 20, 20 }};
size_t size = sizeof(double)*std::accumulate(shape.begin(), shape.end(), 1, std::multiplies<size_t>());
boost::iostreams::mapped_file file;
boost::iostreams::mapped_file_params params;
params.path = "/tmp/mmaptest-2";
params.mode = std::ios::in | std::ios::out;
params.new_file_size = size;
file.open(params);
double* data = static_cast<double*>((void*)file.data());
arrayd3 array(data, shape);
array[0][0][0] = 20;
array[0][1][0] = 19; …Run Code Online (Sandbox Code Playgroud) 我最近在超级计算机网格上有一个帐户,我正在尝试在theri系统中编译我的代码.问题是程序不会链接以下错误:
/mnt/opt/tools/slc6/binutils/2.22/bin/ld: warning: libboost_system.so.1.55.0, needed by /mnt/home/jbzdak/tools/boost_1_55//lib/libboost_thread.so, may conflict with libboost_system.so.5
/mnt/opt/tools/slc6/binutils/2.22/bin/ld: /mnt/home/jbzdak/tools/boost_1_55//lib/libboost_thread.so: undefined reference to symbol '_ZN5boost6system15system_categoryEv'
/mnt/opt/tools/slc6/binutils/2.22/bin/ld: note: '_ZN5boost6system15system_categoryEv' is defined in DSO /mnt/home/jbzdak/tools/boost_1_55//lib/libboost_system.so.1.55.0 so try adding it to the linker command line
/mnt/home/jbzdak/tools/boost_1_55//lib/libboost_system.so.1.55.0: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
这是因为我的程序需要提升1.55,系统中只有1.39 /usr/lib64.我已经在本地文件夹中安装了我的boost版本,但不知何故仍然首先加载系统1.
以下是传递给编译器的标志的摘录:
-std=gnu++11 -Werror -Wall -lboost_thread -lboost_filesystem -lboost_system -lboost_iostreams -g -DG4OPTIMISE -Iinclude
-W -Wall -ansi -pedantic -Wno-non-virtual-dtor -Wno-long-long -Wwrite-strings -Wpointer-arith -Woverloaded-virtual -pipe -O2
Run Code Online (Sandbox Code Playgroud)
以下是令人满意的配置变量:
LIBRARY_PATH …Run Code Online (Sandbox Code Playgroud) 我有一个列(或者更确切地说是pandas帧)有一个列A,这列中的值是整数(假设它们属于范围1..10).
现在我必须在这个数组中选择具有A值的行{3, 6, 9}(在这个例子中,它可以只是或==操作,但在现实生活中这个集合要长得多.
在库(pandas或numpy)中是否有任何函数允许我快速执行以下操作:
arr = pandas.DataFrame(...)
values = [3, 6, 9]
valid_indexes = magic_function(arr.A, values)
Run Code Online (Sandbox Code Playgroud)
或者在numpy中:
arr = np.ndarray(...)
values = [3, 6, 9]
valid_indexes = magic_function(arr[13, :], values)
Run Code Online (Sandbox Code Playgroud)
换句话说,我正在寻找元素in运算符.
我想创建一个大的std::array并用随机数据填充它.问题是如果我声明std :: array program segfaults(GDB说它是segfaults auto start..),如果我评论数组声明程序运行.
这是SCSE:
#include <array>
#include <cstdint>
#include <iostream>
#include <chrono>
static const constexpr size_t size = 1E7;
int main(){
auto start = std::chrono::high_resolution_clock::now();
std::array<uint16_t, size> random_data;
// Here I want to fill random_data with random numbers to avoid
// filling memory twice
auto end = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> elapsed = end-start;
std::cout << "Elapsed sec " << elapsed.count() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
它是-std=gnu++11在GNU/Linux上使用gcc编译的.