반응형
C #의 확장 메서드에 해당하는 Scala?
C #에서는 다음과 같이 작성할 수 있습니다.
using System.Numerics;
namespace ExtensionTest {
public static class MyExtensions {
public static BigInteger Square(this BigInteger n) {
return n * n;
}
static void Main(string[] args) {
BigInteger two = new BigInteger(2);
System.Console.WriteLine("The square of 2 is " + two.Square());
}
}}
이 간단한 확장 방법 은 Scala에서 어떻게 생겼을까 요?
포주 내 라이브러리 패턴은 유사한 구조입니다 :
object MyExtensions {
implicit def richInt(i: Int) = new {
def square = i * i
}
}
object App extends Application {
import MyExtensions._
val two = 2
println("The square of 2 is " + two.square)
}
@Daniel Spiewak의 의견에 따르면 메서드 호출에 대한 반영을 피하고 성능을 지원합니다.
object MyExtensions {
class RichInt(i: Int) {
def square = i * i
}
implicit def richInt(i: Int) = new RichInt(i)
}
Scala 2.10 버전부터 전체 클래스를 암시 적 변환에 적합하게 만들 수 있습니다.
implicit class RichInt(i: Int) {
def square = i * i
}
또한 AnyVal을 확장하여 확장형의 인스턴스 생성을 피할 수 있습니다.
implicit class RichInt(val i: Int) extends AnyVal {
def square = i * i
}
암시 적 클래스 및 AnyVal, 제한 사항 및 단점에 대한 자세한 내용은 공식 문서를 참조하세요.
- http://docs.scala-lang.org/overviews/core/implicit-classes.html
- http://docs.scala-lang.org/overviews/core/value-classes.html
이것은 Daniel의 주석 이후의 코드 입니다.
object MyExtensions {
class RichInt( i: Int ) {
def square = i * i
}
implicit def richInt( i: Int ) = new RichInt( i )
def main( args: Array[String] ) {
println("The square of 2 is: " + 2.square )
}
}
Scala 에서는 (키워드가 아닌) 문자열 검색을 사용하는 경우 웹에서 많이 논의되고 찾기 쉬운 소위 (언어의 발명가에 의해) Pimp My Library 패턴을 사용합니다.
참조 URL : https://stackoverflow.com/questions/3119580/scala-equivalent-of-cs-extension-methods
반응형
'development' 카테고리의 다른 글
헤더 파일에서 정적 const char *를 선언하는 방법은 무엇입니까? (0) | 2020.12.28 |
---|---|
헤더 파일에서 정적 const char *를 선언하는 방법은 무엇입니까? (0) | 2020.12.28 |
사용하다 (0) | 2020.12.28 |
NSString이 특정 문자 (.jpg)로 끝나는 지 어떻게 확인할 수 있습니까? (0) | 2020.12.28 |
함수 내부의 전역 변수에 액세스 할 수 없습니다. (0) | 2020.12.28 |