Good evening
I’ve been martering my Mind for so many hours I finally want to ask for another hint on my code.
# Define an abstract type Pet
abstract type Pet end
# Define an abstract type UO - unknowm
abstract type UO end
abstract type UDO end
# Define concrete types Dog and Cat
struct Dog <: Pet
name::String
end
struct Cat <: Pet
name::String
end
struct Horse <: Pet
name::String
end
struct Bicycle <: UDO
license_plate::String
end
struct cars <: UDO
license_plate::String
end
struct Car <: UDO
license_plate::String
end
# Define a name() function
name(p::Pet) = p.name
# Define multiple methods for meets(a, b)
# Only the first one is stubbed
meets(a::Dog, b::Dog) = "sniffs"
meets(a::Cat, b::Dog) = "hisses"
meets(a::Dog, b::Cat) = "chases"
meets(a::Cat, b::Cat) = "slinks"
meets(a::Pet, b::Pet) = "is cautious"
meets(a::Pet, b::Any) = "runs away"
meets(a::Any, b::Any) = "nothing happens"
# Implement the encounter(a, b) function
encounter(a::Pet, b::Pet) = a.name * " meets " * b.name *" and " * meets(a, b) * "."
encounter(a::Pet, b::Car) = a.name * " meets " * b.license_plate *" and " * meets(a, b) * "."
encounter(a::Pet, b::Bicycle) = a.name * " meets " * b.license_plate *" and " * meets(a, b) * "."
# Define three fallback methods for meets(a, b)
# Stubs are not provided for these, but look at the hints if necessary
@test encounter(buddy, t) == "Buddy meets $(name(t)) and runs away."
### Test Error
FieldError: type ExercismTestReports.RandomType17995412825786376931 has no field `license_plate`; ExercismTestReports.RandomType17995412825786376931 has no fields at all. Stacktrace: [1] getproperty @ ./Base_compiler.jl:54 [inlined] [2] encounter(a::ExercismTestReports.Dog, b::ExercismTestReports.RandomType17995412825786376931)
It seems that for this case, a method belonging to task 6 is called.
I’ve already checked the hints.
the methods
encounter(a::Pet, b::Car) = a.name * " meets " * b.license_plate *" and " * meets(a, b) * "."
encounter(a::Pet, b::Bicycle)..
were added recently as I wanted to exchange
encounter(a::Pet, b::Any) = a.name * " meets " * b.license_plate *" and " * meets(a, b) * “.”
with something fitting to the test case 7.2
but I found no solution and:
what’s also surprising to me:
the function
encounter(a::Pet, b::Car) = a.name * " meets " * b.license_plate *" and " * meets(a, b) * "."
is not called, when
deleting:
encounter(a::Pet, b::Any) = a.name * " meets " * b.license_plate *" and " * meets(a, b) * "."
Error:
FieldError: type ExercismTestReports.Car has no field name, available fields: license_plate
Stacktrace:
[1] getproperty
@ ./Base_compiler.jl:54 [inlined]
[2] encounter(a::ExercismTestReports.Dog, b::ExercismTestReports.Car)
please give me some more background information
thanks in advance,
Nisang