Fix str.split's args

This commit is contained in:
coolreader18
2019-09-15 00:13:05 -05:00
parent 7fb4bf043a
commit 83db646ff4

View File

@@ -346,18 +346,10 @@ impl PyString {
}
#[pymethod]
fn split(
&self,
pattern: OptionalArg<PyStringRef>,
num: OptionalArg<isize>,
vm: &VirtualMachine,
) -> PyObjectRef {
fn split(&self, args: SplitArgs, vm: &VirtualMachine) -> PyObjectRef {
let value = &self.value;
let pattern = match pattern {
OptionalArg::Present(ref s) => Some(s.as_str()),
OptionalArg::Missing => None,
};
let num_splits = num.into_option().unwrap_or(-1);
let pattern = args.sep.as_ref().map(|s| s.as_str());
let num_splits = args.maxsplit;
let elements: Vec<_> = match (pattern, num_splits.is_negative()) {
(Some(pattern), true) => value
.split(pattern)
@@ -382,18 +374,10 @@ impl PyString {
}
#[pymethod]
fn rsplit(
&self,
pattern: OptionalArg<PyStringRef>,
num: OptionalArg<isize>,
vm: &VirtualMachine,
) -> PyObjectRef {
fn rsplit(&self, args: SplitArgs, vm: &VirtualMachine) -> PyObjectRef {
let value = &self.value;
let pattern = match pattern {
OptionalArg::Present(ref s) => Some(s.as_str()),
OptionalArg::Missing => None,
};
let num_splits = num.into_option().unwrap_or(-1);
let pattern = args.sep.as_ref().map(|s| s.as_str());
let num_splits = args.maxsplit;
let mut elements: Vec<_> = match (pattern, num_splits.is_negative()) {
(Some(pattern), true) => value
.rsplit(pattern)
@@ -1182,6 +1166,14 @@ impl IntoPyObject for &String {
}
}
#[derive(FromArgs)]
struct SplitArgs {
#[pyarg(positional_or_keyword, default = "None")]
sep: Option<PyStringRef>,
#[pyarg(positional_or_keyword, default = "-1")]
maxsplit: isize,
}
pub fn init(ctx: &PyContext) {
PyString::extend_class(ctx, &ctx.types.str_type);