Thanks for all the answers.

On Thu, Feb 21, 2013 at 9:17 AM, Niko Matsakis <n...@alum.mit.edu> wrote:

>
>
> Ashish Myles wrote:
>
>> Lots of questions.
>>
>> 1. Is there an array string join function?  I looked through possible
>>     pertinent vector- and string-related modules and I didn't see
>>     something equivalent.
>>
> vec::connect() will join a vector of strings into one string.
>
>
O wow, I don't know how I missed that.  Coming from other languages, though
"join" seem to be the common name for this. Even the following search does
not bring up any reference to connect.
    http://www.google.com/search?q=site%3Astatic.rust-lang.org%2Fdoc%2F+join
Perhaps a note could be made in the docs indicating that vec::connect()
acts like a vector join with a string separator in various other languages?


>  2. Any particular reason to_str() for arrays (defined in in std::to_str)
>>    is defined only for unique arrays? i.e.
>>         impl<A: ToStr> ~[A]: ToStr {
>>             // ...
>>         }
>>    rather than for all array types via &?
>>         impl<A: ToStr> &[A]: ToStr {
>>             // ...
>>         }
>>    Modifying the definition seems to allow it to work for managed and
>> static
>>    arrays.
>>
> I don't think there's a good reason for this.
>
>  3. What is the rust idiom for defining a constant value associated with a
>>    class?
>>
> Declare a constant in the same module as the struct.  Whereas C++ uses the
> class/struct as the primary organizing unit for code, Rust tends to use
> modules to group together related functions, types, constants, and so
> forth.  Similarly, the Rust translation for a C++ class is a module
> containing a struct, impl, etc.
>
>
C++ has both class- and namespace-level constants as they have different
uses. In the example, I have a class/struct-level constant. For example
        struct Vector2<T> {
            enum { N = 2 };
            T m_v[N];
        };
        struct Vector3<T> {
            enum { N = 3 };
            T m_v[N];
        };
Imagine also, as in my macro question below -- a vector struct is created
based on some integer dimension value. So that dimension constant should
logically be defined in the struct in that case as well.
So, I am to presume from your answer that there is no way to create
class-associated constants?  Is this worth considering adding to Rust?


>  6. Is there any way to get a number into a macro and splice it into a
>> class
>>    name? i.e. Something like the intention behind the following.
>>         macro_rules! VectorT {
>>             // invoke it like VectorT<N>
>>             ($name:ident, $n:expr) => (
>>                 struct Vector$n<T> {
>>                     priv m_v: [mut T * $n];
>>                 }
>>             );
>>         }
>>
> I don't know the answer to this.
>
>
I look forward to anyone else taking a stab at how one could accomplish
something similar in Rust. One obvious but not very DRY way would be to
send in all pre-concatenated identifiers. Like in this case, one could
re-write the macro to be invoked as VectorT(Vector3, 3).  If the macro
creates multiple identifiers (including some associate with helper
classes/functions) based on just concatenating the numeric value, then the
invocation could get pretty ugly and would leak too much about the
underlying implementation.

Thanks,
Ashish
_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to