Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 对'的这种用法感到非常困惑;自我'';参数。方法';_Ruby - Fatal编程技术网

Ruby 对'的这种用法感到非常困惑;自我'';参数。方法';

Ruby 对'的这种用法感到非常困惑;自我'';参数。方法';,ruby,Ruby,代码如下;这是教科书上的一个例子。问题: 为什么它“放10英里回来”?既然那一行在类Numeric之外,它不应该是“puts Numeric.10.miles.back”吗 我读过“self”指的是包含类。那么它在这里是如何作为一个数字的呢 如果我从调用的第一个方法中删除“self*”,代码的工作方式似乎仍然完全相同。那么它在那里做什么呢 我似乎无法将这些方法中的任何一个转换为接受参数的普通方法。它输出一个错误,报告方法未定义 我猜number.method是传递参数的一种方式。这个语法叫什么

代码如下;这是教科书上的一个例子。问题:

  • 为什么它“放10英里回来”?既然那一行在类Numeric之外,它不应该是“puts Numeric.10.miles.back”吗

  • 我读过“self”指的是包含类。那么它在这里是如何作为一个数字的呢

  • 如果我从调用的第一个方法中删除“self*”,代码的工作方式似乎仍然完全相同。那么它在那里做什么呢

  • 我似乎无法将这些方法中的任何一个转换为接受参数的普通方法。它输出一个错误,报告方法未定义

  • 我猜number.method是传递参数的一种方式。这个语法叫什么


  • 在ruby中,基本上一切都是一个类的实例。在本例中,数字文字是
    数值的一个实例。这段代码重新打开该类并向其添加方法。这将为程序中的所有数字提供这些方法

  • 否。
    10
    Numeric
    的一个实例,因此刚刚添加了所有公共方法,包括
    miles
    方法
    10.miles
    调用刚才添加的
    10
    miles
    方法

  • “我读到‘self’指的是包含类。”这不准确<代码>自身
  • 是指其方法正在执行的对象。当您调用
    “a,b,c”.split(',')
    时,将调用string对象上的
    split
    方法,并且在该方法内部
    self
    将引用字符串
    “a,b,c”

  • 在第一种方法中没有
    self*
    ,但是如果你指的是
    def miles
    中的
    self*
    ,那么它就是乘法。记住,
    self
    在这些方法中是一个数字。因此,
    10.miles
    产生
    10*5280.feet
    ,返回一个表示10英里的数字

  • 添加参数应该可以正常工作,只要在调用时提供参数:

  • number.method
    是调用(或调用)方法的一种方式
    10.miles.back
    之所以有效,是因为您对编号
    10
    调用了
    miles
    方法,该方法返回不同的编号。然后您对该号码回拨
    方法
  • class Numeric
      def inches
        self
      end
    
      def feet
        self * 12.inches
      end
    
      def yards
        self * 3.feet
      end
    
      def miles
        self * 5280.feet
      end
    
      def back
        self * -1
      end
    
      def forward
        self
      end
    end
    
    puts 10.miles.back
    
    class Numeric
      def miles(arg)
        puts "got an arg #{arg}"
        self * 5280.feet
      end
    end
    
    10.miles("some argument")