2011-09-13 21 views

Respuesta

3

no se puede. a!=b se ejecuta primero y solo el resultado de esto (true o false) se le da a su función por lo que no tiene posibilidad de volver a!=b o 2!=3.

+0

¿por qué esta respuesta Recibe 3 votos cuando en realidad no aborda la cuestión planteada y, en cambio, señala un error de sintaxis en una pregunta que ni siquiera tiene tanta sintaxis? De acuerdo, es una pista útil, pero no veo cómo vale la pena votar como la "mejor" respuesta, ya que no es en absoluto una. –

+1

@GeniaS. ... aborda directamente las preocupaciones del OP ... querían obtener los valores dentro de var's a y b, no el valor pasado. Cambio sutil en la lectura de la pregunta ... – Rondo

2
console.log (arguments) 

imprimirá los argumentos dados a la función, pero en su caso, toda su función se ve es un valor lógico, porque a != b se evaluará en primer lugar, y sólo el resultado se pasa como parámetro en la llamada de función.

1

umm ... aquí, voy a google para ti :) http://www.seifi.org/javascript/javascript-arguments.html

Como algunos otros señalaron, pasando en un ensayo (a! = B) sólo va a obtener un valor booleano (true | falso) como su argumento. Pero si llama a myAssert (a, b), puede evaluar los argumentos y probar su igualdad, así como también imprimir sus valores, siguiendo los consejos del enlace que pegué.

+0

Lo busqué y terminé aquí ... no está tan mal, ¿verdad? :) – Rondo

0

No puede hacerlo. Cuando se tiene la siguiente línea:

my_assert(a!=b); 

La expresión a!=b primero será evaluado y su resultado será pasado a my_assert.

Asumiendo que su función my_assert() se utiliza específicamente para sus propias pruebas y se puede controlar cómo funciona y lo que pasa en ella se podría hacer algo como esto:

my_assert(a!=b, "a!=b"); 

Es decir, pasar un parámetro adicional para el función con una representación de cadena de lo que se está probando. Obviamente eso no te impide decir accidentalmente my_assert(a!=b, "a==b");, y es torpe, pero no puedo pensar en otra forma de hacerlo.

+0

O mejor dicho 'assertNotEqual (a, b)' – Thilo

+0

Buen punto @Thilo, aunque eso no permite que la función assert sepa los nombres de las variables pasadas. Obviamente en mi respuesta estaba pensando más en un 'assertIsTrue (anyexpression) '. – nnnnnn

0

Aquí van:

my_assert = (test) -> 
    str = my_assert.caller.toString() 
    match = /return my_assert\((.*)\)/.exec str 
    console.log match[1], test 

a = '1' 
b = '2' 
do -> my_assert(a!=b) 
do -> my_assert(b!=a) 


> a !== b true 
> b !== a true 

http://jsfiddle.net/m7qRN/

La única advertencia es que hay que llamar a sus my_assert llamadas de funciones anónimas separadas con el fin de ser capaz de obtener con fiabilidad el código fuente de la llamada aseveración .

En CoffeeScript no es tan malo usar la notación do ->.

En JS esto es: (function(){my_assert(a!=b)})();.

Se podía pasar en la prueba como una función de este modo:

my_assert -> a!=b

my_assert(function(){a!=b});

Cuestiones relacionadas