LoginSignup
0
0

abstract typeとstructの関係についてまとめたもの

Posted at

abstract typeとstructの関係についてのメモ

以下では、Juliaの抽象型(abstract type)と構造体(struct)を使用して、アザラシ(Azarashi)という抽象型を基本とするいくつかの異なる具象型(Goma, Haiiro, Minami)を定義している。

抽象型と具象型の定義

abstract type Azarashi end

struct Goma<:Azarashi
	nakigoe::String
	weight::Float64
	height::Float64
end

GomaはAzarashiとして型注釈されているため、Azarashi型のサブタイプとなります。

パラメトリックな具象型の定義とコンストラクタの定義


begin
	struct Haiiro{T<:Real}<:Azarashi
		nakigoe::String
		weight::T
		height::T
		seisokuti::String
	end
	
	function Haiiro(nakigoe::String)
		weight = rand() * 100
		height = rand() * 100
		seisokuti = "Osaka"
		return Haiiro(nakigoe, weight, height, seisokuti)
	end
end

Haiiroはパラメトリックな具象型を定義しており、weightとheightはReal型のサブタイプをとることができる。また、ランダムな重さと高さを生成するコンストラクタも定義している。

別の具象型の定義

struct Minami<:Azarashi
	nakigoe::String
	weight::Float64
	height::Float64
end

多重ディスパッチの関数定義

f関数は、入力の型に応じて異なる振る舞いをする多重ディスパッチの例である。


begin
	function f(a::Azarashi)
		return a.height
	end
	
	function f(h::Haiiro)
		h.seisokuti
	end
end

begin
	ga = Goma("Kyu", 100, 1000)
	f(ga)
end


begin
	ha = Haiiro("Kyu!")
	f(ha)
end



ha2 = Haiiro("Kyu!", 120, 120, "Wakayama")



begin
	ma = Minami("Kyu!!" , 120, 120)
	f(ma)
end

まとめ

abstract typeは抽象型を定義するために使用され、具象型の基底として機能する。

structは具象型を定義するために使用され、特定の抽象型のサブタイプとして定義されることがある。

Juliaでは、関数は多重ディスパッチをサポートしており、関数の振る舞いは引数の型に依存する。

このコードはJuliaの型システムと多重ディスパッチを利用して、異なる種類のアザラシを表現し、それらの異なる属性に基づいて動作する関数を定義することができる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0