3

次のタイプがあるとしましょう。

type cat
  cry:: String
  legs:: Int
  fur:: String
end


type car
  noise::String
  wheels::Int
  speed::Int
end


Lion = cat("meow", 4, "fuzzy")
vw = car("honk", 4, 45)

describeそして、それらの内部のデータを出力するメソッドを両方に追加したいと思います。このようにメソッドを使用するのが最善ですか:

describe(a::cat) = println("Type: Cat"), println("Cry:", a.cry, " Legs:",a.legs,  " fur:", a.fur);
describe(a::car) = println("Type: Car"), println("Noise:", a.noise, " Wheels:", a.wheels, " Speed:", a.speed)

describe(Lion)
describe(vw)

出力:

Type: Cat
Cry:meow Legs:4 fur:fuzzy
Type: Car
Noise:honk Wheels:4 Speed:45

または、前に投稿したこの質問のような関数を使用する必要があります: Julia: What is the best way to setup a OOP model for a library

どちらの方法がより効率的ですか?

ドキュメントのほとんどのMethods例は単純な関数ですが、ループを使用してより複雑にしたい場合、または if ステートメントは可能ですか?Method

4

1 に答える 1

4

まず、型名の最初の文字として大文字を使用することをお勧めします。これは Julia スタイルでは非常に一貫しているため、そうしないと、コードを使用する人にとって間違いなく扱いにくくなります。

複数ステートメントのメソッドを実行しているので、おそらくそれらを完全な関数として記述する必要があります。

function describe(a::cat)
  println("Type: Cat")
  println("Cry:", a.cry, " Legs:", a.legs,  " fur:", a.fur)
end
function describe(a::car)
  println("Type: Car")
  println("Noise:", a.noise, " Wheels:", a.wheels, " Speed:", a.speed)
end

通常、ワンライナー バージョンは単純な単一ステートメントにのみ使用されます。

マニュアルから明確でない場合に備えて、2 つのメソッドで1つの関数を作成していることにも注意してください。

最後に、 Julia の基本print関数にメソッドを追加することもできます。

function Base.print(io::IO, a::cat)
  println(io, "Type: Cat")
  print(io, "Cry:", a.cry, " Legs:", a.legs,  " fur:", a.fur)
end
function Base.print(io::IO, a::car)
  println(io, "Type: Car")
  print(io, "Noise:", a.noise, " Wheels:", a.wheels, " Speed:", a.speed)
end

( を呼び出すとprintln、内部的に呼び出されprintて自動的に追加され\nます)

于 2014-11-15T17:06:47.547 に答える