Scala에서 함수 정의를 인쇄 할 수 있는지 궁금합니다. Scala에서는 함수가 객체로 취급됩니다. 예를 들어Scala에서 함수 정의를 인쇄 할 수 있습니까?
:
스칼라> 발 splitFunction = (값 : 문자열) => {value.split ("")}
위splitFunction: String => Array[String] = <function1>
스칼라 대화식 쉘 splitFunction 입력 파라미터를 갖는 것을 나타낸다 문자열과 문자열 배열을 반환합니다. 실제로 function1이 여기에 나타내는 것은 무엇입니까?
splitFunction의 정의를 인쇄하거나 검색 할 수 있습니까?
우리는 파이썬에서 동일한 얻을 수 있습니다 Is it possible to print a function as a string in Python?
업데이트 : 아파치 스파크에서 , RDD 계보 또는 DAG 각 단계에서 부모 RDD 및 변환에 대한 정보를 저장합니다. flatMap이나 map과 같은 변환에 인수로 사용되는 함수 (심지어 람다 또는 익명 함수)의 정의를 가져 오는 데 관심이 있습니다.
예를 들어: 파일 - DebugTest.scala
val dataRDD = sc.textFile("README.md")
val splitFunction = (value : String) => {value.split(" ")}
val mapRDD = dataRDD.map(splitFunction)
println(mapRDD.toDebugString)
출력 : 출력 이상에서
(1) MapPartitionsRDD[2] at map at DebugTest.scala:43 []
| README.md MapPartitionsRDD[1] at textFile at DebugTest.scala:41 []
| README.md HadoopRDD[0] at textFile at DebugTest.scala:41 []
, 내가 수행하는 것을 변환 이해할 수 있지만 이해하거나으로 사용되는 splitFunction에 대한 정의를 검색 할 수 없습니다 "지도"변환의 인수. 그것을 검색하거나 인쇄 할 수있는 방법이 있습니까? 부여 할 수있는 기능의 좋은 문자열 표현이 없기 때문에 (일반적으로)
자세한 답변을 보내 주셔서 감사합니다. 고맙습니다. 목표와 추가 정보로 내 질문을 업데이트했습니다. 당신이 똑같은 목표를 달성 할 수있는 해결책이 있다면 알려주십시오. – aagora
나는 당신의 추론에 강력하게 동의하지 않습니다. 스칼라는 "컴파일"되지 않습니다. Scala는 프로그래밍 언어입니다. "컴파일 된 프로그래밍 언어"와 같은 것은 없습니다. 프로그래밍 언어는 컴파일되거나 해석되지 않습니다. 프로그래밍 언어 *는 *입니다. 편집 및 해석은 언어가 아닌 컴파일러 또는 해석기 (duh)의 특성입니다. 모든 언어를 컴파일하고 모든 언어를 해석 할 수 있습니다. 스칼라가 컴파일 된 구현물을 가지고 있다는 사실은 함수의 소스 코드에 액세스 할 수 있는지 여부와 아무런 관련이 없습니다. 소스 코드를 저장할 수 있습니다 ... –
... 인터프리터 또는 컴파일러를 사용하여 소스 코드를 저장하는지 여부에 관계없이 함수의. 스칼라 언어 스펙이 'toSource' 메소드를 갖기 위해 필요한 함수라면 컴파일러는 함수의 소스 코드를 정적 문자열 상수로 포함하는'toSource' 메소드로 익명 클래스를 생성합니다. 현재의 모든 주요 주류 ECMAScript 구현이 컴파일되지만 ECMA-262 사양에 따르면 단순히 모든 기능의 소스 코드를 인쇄 할 수 있습니다. –