Rustã§å¼æ°åã¨æ»ãå¤åãSizedã§ãªãã¦ãããæ¡ä»¶
éå»ã®è¨äºã§Sized
ã«ã¤ãã¦èª¬æããããé¢æ°ã®å¼æ°ã¨æ»ãå¤ã«ã¤ãã¦ã¯ããç´æã«åããæ¡ä»¶ãé©ç¨ããã¦ããã®ã§èª¬æããã
- æ»ãå¤å: é¢æ°ãã¡ã½ãããæ¬ä½ããã¤å ´åã«æ¤æ»ããããæ¬ä½ãæããªãå ´åã¯
Sized
ã§ãªãã¦ãããã - å¼æ°å: ããèªä½ã¯æ¤æ»ãããªããé¢æ°ãã¡ã½ãããæ¬ä½ãæã¤å ´åã¯ãå¼æ°ãåãåããã¿ã¼ã³ã«å¯¾ããåæ¤æ»ãå®è¡ãããããã®ã¨ããå¤ãååã«æç¸ããã¦ããã°ãæç¸ãããååã®åã
Sized
ã§ãªããã°ãªããªãã
ä¾
trait Foo { fn f(x: str) -> str; // OK // fn g(x: str) -> str { x } // error } fn h(_: str) {} // OK // fn i(x: str) -> str { x } // error fn j(ref x : str) {} // OK, but no way to call it fn main() { }
ãã®è¦åã¯ä¸è¦ããã¨éç®±çãªåé¡ã®ããã«è¦ããããå®ã¯ FnOnce
ãã¬ã¤ããè¦ãã¨å®éã«æ´»ç¨ããã¦ãããã¨ããããã
pub trait FnOnce<Args> { type Output; extern "rust-call" fn call_once(self, args: Args) -> Self::Output; // ^^^^ Self : ?Sized }
ãã¬ã¤ãã® Self
å¼æ°ã ãã¯æé»ã® Sized
å¢çãé©ç¨ãããªããããããã§ã¯ Self: ?Sized
ã§ããã(é¢é£å㯠Sized
ãé©ç¨ãããã)
ãã®é¢æ°ã« Self: Sized
å¢çãå¿
è¦ãªãã®ã¯ãä¸è¨ã®æ¡ä»¶ã®ããã§ããã