내 개체의 모든 필드를 명시 적으로 초기화하는 개체 이니셜 라이저가 내 코드에 있습니다. 그러나 필자의 경우 매개 변수의 대부분은 적절한 기본값을 가지고 있으므로이를 사용하고 싶습니다.골란에서 가장 유연한 함수 서명
나는 보통 키워드 인수 또는 기본값의 조합을 사용하며 내 __init__
메서드에는 유효성 검사 논리가 포함되어 있으므로 개체 초기화에 제로 구성 원칙을 사용할 수 있습니다. 예 :
class Foo:
"""This class designed to show zero configuration
principle in action"""
def __init__(self, mandatory, optional=None, **kwargs):
self.__field1 = mandatory
self.__field2 = optional or make_default2()
if 'bar' in kwargs:
self.__field3 = kwargs['bar']
else:
self.__field3 = make_default3()
f = Foo('mondatory', bar=Bar())
Go 또는 키워드 매개 변수 또는 함수 오버로드에는 기본값이있는 매개 변수가 없습니다. 그 때문에 유연한 초기화 코드를 작성하는 것은 어렵습니다 (일반적으로 그러한 코드의 성능은별로 신경 쓰지 않습니다). Go에 그러한 코드를 작성하는 가장 관용적 인 방법을 찾고 싶습니다. 어쩌면 런타임 유형 리플렉션과 맵의 일부 조합이 작업을 수행 할 것입니다. 어떻게 생각하십니까? 이동에서 새로 할당 된 메모리는 항상 제로가되기 때문에, 관용적 인 방법에 의해이 사실을 명시 적으로 사용할 수 있도록하는 것입니다
프로그래밍 언어로 뭔가를하는 관용적 인 방법은 "의견 기반"이 아닙니다! – Lazin
Rob Pike는 의견이 아닙니다. Rob Pike는 언어를 만든 사람 중 한 명입니다. – fuz
그래서 뭐? 나는 언어에 대해 논쟁하지 않고, 단지이 언어에서 공통적 인 관용어에 대해 묻습니다. 그런데이 관용구는 언어에 의해 창조자에 의해 돌이키지 않습니다. 이것이 어떻게 의견을 바탕으로 할 수 있습니까? – Lazin