Issue #14951 has been updated by danga (Dan Garubba).


After getting the feedback here, I no longer support my original proposal. But I would be happy if something like `Object#iff?` existed instead. I think logical equivalence is a legitimate use case. And orthogonal expressions for logical equivalence require some degree of conversion to boolean singletons, which seems to be generally viewed as anti-idiomatic in Ruby. But if the community thinks this use case is too narrow, I'll just have to live with those truthy-safe orthogonal expressions, or more type discipline for boolean equality expressions.

----------------------------------------
Feature #14951: New operator to evaluate truthy/falsy/logical equivalence
https://bugs.ruby-lang.org/issues/14951#change-73293

* Author: danga (Dan Garubba)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
I propose adding a new operator for truthy/falsy equivalence, similar to what was proposed on https://bugs.ruby-lang.org/issues/13067, but with new syntax. The main purpose would be for writing expressions for logical equivalence (i.e., "if and only if" relationships) that only considers the truthiness the operands. Since predicate methods like `File#size?` and operators like `=~` follow truthy semantics without returning the `true` and `false` singletons, using them in logical expressions that evaluate for logical equivalence can be error-prone without the proper return type awareness and conversions. This proposed operator would be equivalent to `!!a == !!b`, but I feel that a new operator would be more concise and more expressive of the concept of logical equivalence.

Attached is a prototype implementation of the operator as '=?'.
 

---Files--------------------------------
teq.patch (3.47 KB)


-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>