On Monday, March 21, 2016 at 1:56:34 AM UTC+2, Jeffrey Sarnoff wrote:
>
> Redis itself is written in C. They document GET key:
>
>> Get the value of key. If the key does not exist the special value nil is
>> returned.
>
> An error is returned if the value stored at key is not a string, because
>> GET <http://redis.io/commands/get> only handles string values.
>
>
> digging deeper
>
>> The client library API should not return an empty string, but a nil
>> object, when the server replies with a Null Bulk String.
>
> For example a Ruby library should return 'nil' while a C library should
>> return NULL (or set a special flag in the reply object), and so forth.
>
>
> Single elements of an Array may be Null. This is used in Redis replies in
>> order to signal that this elements are missing and not empty strings.
>
> This can happen with the SORT command when used with the GET *pattern* option
>> when the specified key is missing.
>
> [For example, if the] second element is a Null. The client library should
>> return something like this: ["foo", nil, "bar"]
>
>
> The Redis *nil* indicates a non-present value (missing or unavailable or, not
> extant: a domain|-> range error).
>
> From a semiotic viewpoint, Julia's *nothing* is closer to "absence" than it
> is to "an absent value"; of course
>
> the operational machinery supplies an actual entity to be *nothing* (a
> singleton realization ofthe type Void).
>
>
> A much more contextual fit be the use of Nullable, although that may require
> more of the client; a simpler way
>
> to handle the Redis *nil* without doing something with *nothing* is to use a
> dedicated const symbol or a singleton
>
> to be that sentinel, perhaps:
>
> * const RedisNil = :RedisNil # or*
>
> *type RedisNIL end; RedisNil = RedisNIL()*
>
>
> *Somewhere there are lengthy and informative discussions about Julia and nil
> / NULL / nothing.*
>
> *(I noted this thread to the Redis.jl project).*
>
>
>
>
>
>
>
> On Sunday, March 20, 2016 at 6:45:57 PM UTC-4, jock....@gmail.com wrote:
>>
>> Redis.jl returns nothing when requesting a the value of a key that
>> doesn't exist:
>>
>> using Redis
>> conn = RedisConnection()
>> r = get(conn, "non_existent_key")
>> disconnect(conn)
>> r == nothing # true
>>
>>
>> On Sunday, March 20, 2016 at 1:31:30 AM UTC+11, Milan Bouchet-Valat wrote:
>>>
>>> For now I don't know of a good solution to this pattern, but there's
>>> been some discussion about it:
>>> https://github.com/JuliaLang/julia/issues/15174
>>>
>>> You should definitely use a Nullable instead of returning nothing.
>>>
>>>
>>> Regards
>>>
>>> Le samedi 19 mars 2016 à 02:58 -0700, Jeffrey Sarnoff a écrit :
>>> > You may be misusing nothing. It is unusual that a function would
>>> > return nothing some of the time and something other times.
>>> > Take a look at http://docs.julialang.org/en/latest/manual/faq/#nothin
>>> > gness-and-missing-values
>>> > If you have additional questions about this, please give an example
>>> > of what get_a(...) is getting and why it would be nothing some of the
>>> > time.
>>> >
>>> > > Hi All
>>> > >
>>> > >
>>> > > I found my self writing code like this a lot:
>>> > >
>>> > > x = get_a(...)
>>> > >
>>> > > if x != nothing
>>> > > y::A = x
>>> > > do_sth(y, ...)
>>> > > end
>>> > >
>>> > > In the above, I have to check for nothing first, and if it is not
>>> > > nothing, then I do a type assert to make sure the type is what I
>>> > > expected.
>>> > >
>>> > > Is there any function or macro in Julia that can help this?
>>> > >
>>> > > I know in F#, I have option.bind, so option.bind f x is equivalent
>>> > > to a pattern match: if x is None - > None; if x is something ->
>>> > > f(something)
>>> > >
>>> > > Also in C#, I have "customers?[0]?.Orders?.Count();" (as long as
>>> > > there is null before ?, it returns null immediately)
>>> > >
>>> > > Does Julia have something similar?
>>> > >
>>> > >
>>
>>
The latest merge resolves the issue of 'nil' in Redis.jl.