fn to_str(&self) -> ~str { ~"()" }
}
-impl<A:ToStr> ToStr for (A,) {
- #[inline]
- fn to_str(&self) -> ~str {
- match *self {
- (ref a,) => {
- format!("({},)", (*a).to_str())
- }
- }
- }
-}
-
impl<A:ToStr+Hash+Eq, B:ToStr> ToStr for HashMap<A, B> {
#[inline]
fn to_str(&self) -> ~str {
}
}
-impl<A:ToStr,B:ToStr> ToStr for (A, B) {
- #[inline]
- fn to_str(&self) -> ~str {
- // FIXME(#4653): this causes an llvm assertion
- //let &(ref a, ref b) = self;
- match *self {
- (ref a, ref b) => {
- format!("({}, {})", (*a).to_str(), (*b).to_str())
- }
- }
- }
-}
-
-impl<A:ToStr,B:ToStr,C:ToStr> ToStr for (A, B, C) {
- #[inline]
- fn to_str(&self) -> ~str {
- // FIXME(#4653): this causes an llvm assertion
- //let &(ref a, ref b, ref c) = self;
- match *self {
- (ref a, ref b, ref c) => {
- format!("({}, {}, {})",
- (*a).to_str(),
- (*b).to_str(),
- (*c).to_str()
- )
- }
- }
- }
-}
-
impl<'a,A:ToStr> ToStr for &'a [A] {
#[inline]
fn to_str(&self) -> ~str {
assert_eq!((~"hi").to_str(), ~"hi");
}
- #[test]
- fn test_tuple_types() {
- assert_eq!((1, 2).to_str(), ~"(1, 2)");
- assert_eq!((~"a", ~"b", false).to_str(), ~"(a, b, false)");
- assert_eq!(((), ((), 100)).to_str(), ~"((), ((), 100))");
- }
-
#[test]
fn test_vectors() {
let x: ~[int] = ~[];
#[cfg(not(test))] use default::Default;
use fmt;
use result::{Ok, Err};
+use to_str::ToStr;
/// Method extensions to pairs where both types satisfy the `Clone` bound
pub trait CloneableTuple<T, U> {
}
}
+ impl<$($T: fmt::Show),+> ToStr for ($($T,)+) {
+ fn to_str(&self) -> ~str {
+ format!("{}", *self)
+ }
+ }
+
impl<$($T: fmt::Show),+> fmt::Show for ($($T,)+) {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write_tuple!(f.buf, $(self.$get_ref_fn()),+)