Question: I have this question in a homework assignment for my Computer Languages class. I'm trying to figure out what each one means, but I'm getting stuck.

> 
> Errors in a computer program can be
>  classified according to when they are
>  detected and, if they are detected at
>  compile time, what part of the
>  compiler detects them. Using your
>  favorite programming language, give an
>  example of:
> 
> 
> (a) A lexical error, detected by the
>  scanner.
> 
> 
> (b) A syntax error, detected by the
>  parser.
> 
> 
> (c) A static semantic error, detected
>  (at compile-time) by semantic
>  analysis.
> 
> 
> (d) A dynamic semantic error, detected
>  (at run-time) by code generated by the
>  compiler.
> 
> 
> 

For (a), I think this is would be correct: `int char foo;`

For (b), `int foo` (no semicolon)

For (c) and (d), I'm not sure what is being asked.

Thanks for the help.

Answer: 
I think the simplest solution is to test "boolean" parameters against their String representation.

```
@show_all = params[:show_all]
if @show_all.to_s == "true"
   # do stuff
end

```

Regardless of whether Rails delivers the parameter as the String "true" or "false" or an actual TrueClass or FalseClass, this test will always work.
While not explicitly what the question is about I feel this is appropriately related; If you're trying to pass true boolean variables in a **rails test** then you're going to want the following syntax.

```
post :update, params: { id: user.id }, body: { attribute: true }.to_json, as: :json

```

I arrived at this thread looking for exactly this syntax, so I hope it helps someone looking for this as well. Credit to [Lukom](https://github.com/rspec/rspec-rails/issues/1519#issuecomment-502448722)