値をコピーせずに返したい

一応前回の続きになる. マサカリは@_yamaderまで.

いい感じの例が思い浮かばなかった.

Rust

fn sort<'a>(a: &'a str, b: &'a str) -> (&'a str, &'a str) {
  for (i, j) in a.chars().zip(b.chars()) {
    if i < j {
      return (a, b);
    }
    if i > j {
      return (b, a);
    }
  }
  if a.len() > b.len() {
    return (b, a);
  }
  (a, b)
}

fn main() {
  let a = "abcd";
  let b = "asdf";
  println!("{:?}", sort(b, a));
  println!("{:?}", sort("asdfg", "asdf"));
}

ライフタイム引数の部分はどうにかならなかったのだろうか…….

D

import std;

Tuple!(string, string) sort(T: string)(auto ref T a, auto ref T b) {
  foreach(i, j; zip(a, b)) {
    if(i < j) return tuple(a, b);
    if(i > j) return tuple(b, a);
  }
  if(a.length > b.length) return tuple(b, a);
  return tuple(a, b);
}

void main() {
  string a = "abcd";
  string b = "asdf";
  sort(b, a).writeln;
  sort("asdfg", "asdf").writeln;
  /*
  auto res = sort(b, a);
  assert(&a[0] == &res[0][0]);
  */
}

データ本体がコピーされていないので目的は達成している.

C++

そのうち書く.

所感

そのうち書く.